@getjones/test-infra 5.2.10 → 5.2.12

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 (288) hide show
  1. package/eslint.config.mjs +156 -156
  2. package/package.json +43 -42
  3. package/src/common/commonFlows/auth/auth.js +95 -95
  4. package/src/common/commonFlows/index.js +5 -5
  5. package/src/common/commonFlows/records/records.js +457 -423
  6. package/src/common/commonFlows/users/users.js +15 -15
  7. package/src/common/consts/accountSettings.js +112 -112
  8. package/src/common/consts/activationStatuses.js +6 -6
  9. package/src/common/consts/analysisStatuses.js +7 -7
  10. package/src/common/consts/autocomplete.js +10 -10
  11. package/src/common/consts/constantsForRecordsSortingAndFilters.js +49 -49
  12. package/src/common/consts/dashboardCharts.js +18 -18
  13. package/src/common/consts/homepage/AttentionTab.js +6 -6
  14. package/src/common/consts/homepage/sortOptions.js +19 -19
  15. package/src/common/consts/projectSettings.js +28 -28
  16. package/src/common/consts/recordTypes.js +5 -5
  17. package/src/common/consts/requirementActions.js +10 -10
  18. package/src/common/consts/s3FileTypes.js +12 -12
  19. package/src/common/consts/userRoles.js +21 -21
  20. package/src/common/consts/userTypes.js +16 -16
  21. package/src/common/errorCodes.js +12 -11
  22. package/src/common/httpResponseStatusCodes.json +19 -19
  23. package/src/common/httpResponseTypes.json +2 -2
  24. package/src/common/requests/apiKeyAuth/requests.js +45 -45
  25. package/src/common/requests/cookieAuth/requests.js +40 -40
  26. package/src/common/requests/internalAuth/requests.js +48 -48
  27. package/src/common/requests/requestHandlers.js +112 -112
  28. package/src/common/utils/arrayUtils.js +19 -19
  29. package/src/common/utils/complianceUtil.js +114 -114
  30. package/src/common/utils/configsUtil.js +22 -22
  31. package/src/common/utils/dataTypeUtils.js +41 -41
  32. package/src/common/utils/numberUtils.js +22 -22
  33. package/src/common/utils/objectUtils.js +102 -102
  34. package/src/common/utils/timeUtils.js +195 -195
  35. package/src/common/validations/typeValidations.js +36 -36
  36. package/src/defaults/configs/attributes.js +170 -170
  37. package/src/defaults/configs/auditConfigs.js +129 -129
  38. package/src/defaults/configs/coverage.js +144 -144
  39. package/src/defaults/configs/polices.js +28 -28
  40. package/src/defaults/configs/requirement.js +218 -218
  41. package/src/defaults/index.js +7 -7
  42. package/src/env.js +58 -58
  43. package/src/factory/globalRecord/globalRecord.js +43 -43
  44. package/src/factory/index.js +8 -8
  45. package/src/factory/records/records.js +295 -295
  46. package/src/factory/users/users.js +70 -70
  47. package/src/index.js +114 -114
  48. package/src/reporters/mochaReporter.js +273 -273
  49. package/src/resources/agreements/agreement.pdf +0 -0
  50. package/src/saas/internal-api/accountDirectory/api/accountDirectory.api.js +152 -152
  51. package/src/saas/internal-api/accountDirectory/api/accountDirectory.service.js +576 -576
  52. package/src/saas/internal-api/accountDirectory/consts/accountDirectory.consts.js +75 -75
  53. package/src/saas/internal-api/accountDirectory/index.js +5 -5
  54. package/src/saas/internal-api/accountDirectory/models/accountDirectory.models.js +172 -172
  55. package/src/saas/internal-api/accounts/api/core/accounts.core.api.js +48 -48
  56. package/src/saas/internal-api/accounts/api/core/accounts.core.service.js +104 -104
  57. package/src/saas/internal-api/accounts/api/emailCustomization/accounts.email.customizations.api.js +29 -29
  58. package/src/saas/internal-api/accounts/api/emailCustomization/accounts.email.customizations.service.js +60 -60
  59. package/src/saas/internal-api/accounts/api/emailCustomization/consts.js +8 -8
  60. package/src/saas/internal-api/accounts/api/openapi/accounts.openapi.api.js +54 -54
  61. package/src/saas/internal-api/accounts/api/openapi/accounts.openapi.service.js +67 -67
  62. package/src/saas/internal-api/accounts/api/settings/settings.api.js +21 -21
  63. package/src/saas/internal-api/accounts/api/settings/settings.service.js +58 -58
  64. package/src/saas/internal-api/accounts/consts/consts.js +8 -8
  65. package/src/saas/internal-api/accounts/index.js +22 -22
  66. package/src/saas/internal-api/accounts/models/core/create.account.model.js +16 -16
  67. package/src/saas/internal-api/accounts/models/settings/update.settings.model.js +110 -110
  68. package/src/saas/internal-api/accounts/utils/utils.js +60 -60
  69. package/src/saas/internal-api/agreement/api/agreement.api.js +39 -39
  70. package/src/saas/internal-api/agreement/api/agreement.service.js +121 -121
  71. package/src/saas/internal-api/agreement/consts/consts.js +11 -11
  72. package/src/saas/internal-api/agreement/index.js +12 -12
  73. package/src/saas/internal-api/agreement/models/create.agreement.model.js +12 -12
  74. package/src/saas/internal-api/agreement/models/createAgreementByAuditorModel.js +11 -11
  75. package/src/saas/internal-api/agreement/models/createAgreementByPMModel.js +13 -13
  76. package/src/saas/internal-api/auditCustomerRules/api/customer.rules.api.js +49 -49
  77. package/src/saas/internal-api/auditCustomerRules/api/customer.rules.service.js +121 -121
  78. package/src/saas/internal-api/auditCustomerRules/consts/customer.rule.js +40 -40
  79. package/src/saas/internal-api/auditCustomerRules/index.js +7 -7
  80. package/src/saas/internal-api/auditCustomerRules/models/customer.rule.model.js +55 -55
  81. package/src/saas/internal-api/auditCustomerRules/utils/customer.rule.util.js +70 -70
  82. package/src/saas/internal-api/auditNotes/api/audit.notes.api.js +40 -40
  83. package/src/saas/internal-api/auditNotes/api/audit.notes.service.js +116 -116
  84. package/src/saas/internal-api/auditNotes/index.js +4 -4
  85. package/src/saas/internal-api/auditNotes/models/audit.note.model.js +32 -32
  86. package/src/saas/internal-api/auditorComments/api/auditor.comments.api.js +20 -20
  87. package/src/saas/internal-api/auditorComments/api/auditor.comments.service.js +27 -27
  88. package/src/saas/internal-api/auditorComments/consts/auditor.comment.js +16 -16
  89. package/src/saas/internal-api/auditorComments/index.js +5 -5
  90. package/src/saas/internal-api/auditorComments/models/auditor.comment.model.js +40 -40
  91. package/src/saas/internal-api/auth/api/auth.api.js +78 -78
  92. package/src/saas/internal-api/auth/api/auth.service.js +206 -172
  93. package/src/saas/internal-api/auth/index.js +3 -3
  94. package/src/saas/internal-api/coi/api/coi.api.js +76 -76
  95. package/src/saas/internal-api/coi/api/coi.service.js +104 -104
  96. package/src/saas/internal-api/coi/consts/duplicateHandling.js +7 -7
  97. package/src/saas/internal-api/coi/consts/hashes.js +5 -5
  98. package/src/saas/internal-api/coi/consts/uploaderTypes.js +3 -3
  99. package/src/saas/internal-api/coi/index.js +16 -16
  100. package/src/saas/internal-api/coi/models/Combine.last.two.cois.model.js +25 -25
  101. package/src/saas/internal-api/coi/models/submit.coi.batch.model.js +23 -23
  102. package/src/saas/internal-api/coi/models/submit.coi.model.js +23 -23
  103. package/src/saas/internal-api/coi/utils/utils.js +185 -185
  104. package/src/saas/internal-api/compliance/api/amBestRating/am.best.rating.api.js +12 -12
  105. package/src/saas/internal-api/compliance/api/amBestRating/am.best.rating.service.js +14 -14
  106. package/src/saas/internal-api/compliance/api/audit/aiAudit/aiAudit.api.js +63 -63
  107. package/src/saas/internal-api/compliance/api/audit/aiAudit/aiAudit.service.js +99 -99
  108. package/src/saas/internal-api/compliance/api/audit/audit.api.js +124 -124
  109. package/src/saas/internal-api/compliance/api/audit/audit.service.js +390 -390
  110. package/src/saas/internal-api/compliance/api/complianceSnapshot/compliance.snapshot.api.js +32 -32
  111. package/src/saas/internal-api/compliance/api/complianceSnapshot/compliance.snapshot.service.js +73 -73
  112. package/src/saas/internal-api/compliance/api/convert/convert.api.js +12 -12
  113. package/src/saas/internal-api/compliance/api/convert/convert.service.js +7 -7
  114. package/src/saas/internal-api/compliance/api/coverage/coverage.api.js +33 -33
  115. package/src/saas/internal-api/compliance/api/coverage/coverage.service.js +46 -46
  116. package/src/saas/internal-api/compliance/api/overrideGap/override.gap.api.js +86 -86
  117. package/src/saas/internal-api/compliance/api/overrideGap/override.gap.service.js +300 -300
  118. package/src/saas/internal-api/compliance/consts/audit.js +130 -130
  119. package/src/saas/internal-api/compliance/consts/overrideGapRequest/override.gap.request.js +7 -7
  120. package/src/saas/internal-api/compliance/index.js +41 -41
  121. package/src/saas/internal-api/compliance/models/audit/audit.model.js +109 -109
  122. package/src/saas/internal-api/compliance/models/overrideGapRequest/override.gap.request.model.js +16 -16
  123. package/src/saas/internal-api/compliance/models/waive/waive.model.js +112 -112
  124. package/src/saas/internal-api/compliance/utils/auditUtil.js +308 -308
  125. package/src/saas/internal-api/compliance/utils/coverageUtil.js +45 -45
  126. package/src/saas/internal-api/contractors/api/contractors.service.js +482 -482
  127. package/src/saas/internal-api/contractors/consts/consts.js +6 -6
  128. package/src/saas/internal-api/contractors/index.js +8 -8
  129. package/src/saas/internal-api/contractors/models/assign.requirement.model.js +11 -11
  130. package/src/saas/internal-api/contractors/models/edit.contractor.model.js +73 -73
  131. package/src/saas/internal-api/contractors/models/link.request.model.js +10 -10
  132. package/src/saas/internal-api/contractors/models/verification.contractor.model.js +29 -29
  133. package/src/saas/internal-api/contractors/utils.js +25 -25
  134. package/src/saas/internal-api/customTags/api/customTags.api.js +47 -47
  135. package/src/saas/internal-api/customTags/api/customTags.service.js +96 -96
  136. package/src/saas/internal-api/customTags/index.js +4 -4
  137. package/src/saas/internal-api/customTags/models/customTagsModels.js +17 -17
  138. package/src/saas/internal-api/dashboard/api/recordList.api.js +38 -38
  139. package/src/saas/internal-api/dashboard/api/recordList.service.js +60 -60
  140. package/src/saas/internal-api/dashboard/index.js +5 -5
  141. package/src/saas/internal-api/dashboard/models/dashboard.filter.criteria.model.js +38 -38
  142. package/src/saas/internal-api/dbEmails/api/db.emails.api.js +25 -25
  143. package/src/saas/internal-api/dbEmails/api/db.emails.service.js +178 -178
  144. package/src/saas/internal-api/dbEmails/consts/consts.js +66 -66
  145. package/src/saas/internal-api/dbEmails/index.js +6 -6
  146. package/src/saas/internal-api/dbEmails/models/db.emails.model.js +22 -22
  147. package/src/saas/internal-api/dbEmails/utils/util.js +82 -82
  148. package/src/saas/internal-api/emailCustomization/api/email.customization.api.js +26 -26
  149. package/src/saas/internal-api/emailCustomization/api/email.customization.service.js +50 -50
  150. package/src/saas/internal-api/emailCustomization/index.js +3 -3
  151. package/src/saas/internal-api/fileScan/api/file.scan.api.js +14 -14
  152. package/src/saas/internal-api/fileScan/api/file.scan.service.js +35 -35
  153. package/src/saas/internal-api/fileScan/index.js +3 -3
  154. package/src/saas/internal-api/fileScan/models/update.scan.status.model.js +13 -13
  155. package/src/saas/internal-api/globalRecord/api/global.record.api.js +95 -95
  156. package/src/saas/internal-api/globalRecord/api/global.record.service.js +112 -112
  157. package/src/saas/internal-api/globalRecord/consts.js +20 -20
  158. package/src/saas/internal-api/globalRecord/index.js +6 -6
  159. package/src/saas/internal-api/globalRecord/models/global.record.model.js +60 -60
  160. package/src/saas/internal-api/globalRecord/utils/util.js +161 -161
  161. package/src/saas/internal-api/homepageCharts/api/charts.api.js +12 -12
  162. package/src/saas/internal-api/homepageCharts/api/charts.service.js +7 -7
  163. package/src/saas/internal-api/homepageCharts/index.js +3 -3
  164. package/src/saas/internal-api/notificationCenter/api/notification.center.api.js +32 -32
  165. package/src/saas/internal-api/notificationCenter/api/notification.center.service.js +49 -49
  166. package/src/saas/internal-api/notificationCenter/consts.js +9 -9
  167. package/src/saas/internal-api/notificationCenter/index.js +4 -4
  168. package/src/saas/internal-api/outlook/api/outlook.api.js +14 -14
  169. package/src/saas/internal-api/outlook/api/outlook.service.js +14 -14
  170. package/src/saas/internal-api/outlook/index.js +3 -3
  171. package/src/saas/internal-api/policyFile/api/policy.file.api.js +43 -43
  172. package/src/saas/internal-api/policyFile/api/policy.file.service.js +117 -117
  173. package/src/saas/internal-api/policyFile/consts.js +21 -21
  174. package/src/saas/internal-api/policyFile/index.js +11 -11
  175. package/src/saas/internal-api/policyFile/models/create.policy.file.model.js +11 -11
  176. package/src/saas/internal-api/policyFile/models/set.publish.flag.to.policy.model.js +13 -13
  177. package/src/saas/internal-api/projects/api/core/projects.api.js +39 -39
  178. package/src/saas/internal-api/projects/api/core/projects.service.js +77 -77
  179. package/src/saas/internal-api/projects/api/settings/project.settings.api.js +18 -18
  180. package/src/saas/internal-api/projects/api/settings/project.settings.service.js +35 -35
  181. package/src/saas/internal-api/projects/consts/defaultProject.js +3 -3
  182. package/src/saas/internal-api/projects/index.js +24 -24
  183. package/src/saas/internal-api/projects/models/core/create.project.model.js +41 -41
  184. package/src/saas/internal-api/projects/models/core/update.project.model.js +47 -47
  185. package/src/saas/internal-api/projects/models/settings/update.project.settings.model.js +48 -48
  186. package/src/saas/internal-api/projects/utils/utils.js +159 -159
  187. package/src/saas/internal-api/recordHub/api/record.hub.api.js +20 -20
  188. package/src/saas/internal-api/recordHub/api/record.hub.service.js +86 -86
  189. package/src/saas/internal-api/recordHub/index.js +3 -3
  190. package/src/saas/internal-api/recordNotes/api/record.notes.api.js +38 -38
  191. package/src/saas/internal-api/recordNotes/api/record.notes.service.js +56 -56
  192. package/src/saas/internal-api/recordNotes/api/record.notes.utils.js +12 -12
  193. package/src/saas/internal-api/recordNotes/index.js +3 -3
  194. package/src/saas/internal-api/relatedDocs/api/related.docs.api.js +98 -98
  195. package/src/saas/internal-api/relatedDocs/api/related.docs.service.js +180 -180
  196. package/src/saas/internal-api/relatedDocs/index.js +4 -4
  197. package/src/saas/internal-api/relatedDocs/models/related.doc.model.js +36 -36
  198. package/src/saas/internal-api/reports/api/reports.api.js +56 -56
  199. package/src/saas/internal-api/reports/api/reports.service.js +68 -68
  200. package/src/saas/internal-api/reports/consts/consts.js +71 -71
  201. package/src/saas/internal-api/reports/index.js +15 -15
  202. package/src/saas/internal-api/reports/models/report.model.js +27 -27
  203. package/src/saas/internal-api/requests/api/requests.api.js +132 -132
  204. package/src/saas/internal-api/requests/api/requests.service.js +315 -315
  205. package/src/saas/internal-api/requests/index.js +21 -21
  206. package/src/saas/internal-api/requests/models/create.request.model.js +39 -39
  207. package/src/saas/internal-api/requests/models/draft.request.criteria.model.js +18 -18
  208. package/src/saas/internal-api/requests/models/draft.request.report.model.js +14 -14
  209. package/src/saas/internal-api/requests/models/edit.request.model.js +31 -31
  210. package/src/saas/internal-api/requests/models/homepageRequestCriteriaModel.js +19 -19
  211. package/src/saas/internal-api/requests/models/requestListCriteriaModel.js +17 -17
  212. package/src/saas/internal-api/requests/models/tenant.request.model.js +9 -9
  213. package/src/saas/internal-api/requests/utils.js +16 -16
  214. package/src/saas/internal-api/requestsTable/api/requests.table.api.js +20 -20
  215. package/src/saas/internal-api/requestsTable/api/requests.table.service.js +14 -14
  216. package/src/saas/internal-api/requestsTable/index.js +3 -3
  217. package/src/saas/internal-api/requirements/api/lease/lease.api.js +74 -56
  218. package/src/saas/internal-api/requirements/api/lease/lease.service.js +167 -123
  219. package/src/saas/internal-api/requirements/api/requirements.api.js +65 -65
  220. package/src/saas/internal-api/requirements/api/requirements.service.js +198 -198
  221. package/src/saas/internal-api/requirements/consts/attributeTypes.json +8 -8
  222. package/src/saas/internal-api/requirements/consts/consts.js +22 -15
  223. package/src/saas/internal-api/requirements/index.js +22 -21
  224. package/src/saas/internal-api/requirements/models/create.requirement.model.js +17 -17
  225. package/src/saas/internal-api/requirements/models/extraction.request.model.js +16 -16
  226. package/src/saas/internal-api/requirements/models/policy.model.js +35 -35
  227. package/src/saas/internal-api/requirements/models/tab.extraction.request.model.js +14 -0
  228. package/src/saas/internal-api/requirements/models/update.requirement.model.js +19 -19
  229. package/src/saas/internal-api/requirements/utils/utils.js +129 -129
  230. package/src/saas/internal-api/sampleCoi/api/sample.coi.api.js +15 -15
  231. package/src/saas/internal-api/sampleCoi/api/sample.coi.service.js +48 -48
  232. package/src/saas/internal-api/sampleCoi/consts/consts.js +22 -22
  233. package/src/saas/internal-api/sampleCoi/index.js +4 -4
  234. package/src/saas/internal-api/serviceArea/api/coordinates.api.js +12 -12
  235. package/src/saas/internal-api/serviceArea/api/coordinates.service.js +7 -7
  236. package/src/saas/internal-api/serviceArea/index.js +4 -4
  237. package/src/saas/internal-api/serviceArea/utils/utils.js +8 -8
  238. package/src/saas/internal-api/tableOfContents/api/table.of.contents.api.js +37 -37
  239. package/src/saas/internal-api/tableOfContents/api/table.of.contents.service.js +19 -19
  240. package/src/saas/internal-api/tableOfContents/index.js +3 -3
  241. package/src/saas/internal-api/tabs/api/tabs.api.js +32 -32
  242. package/src/saas/internal-api/tabs/api/tabs.service.js +60 -60
  243. package/src/saas/internal-api/tabs/index.js +3 -3
  244. package/src/saas/internal-api/tabs/models/tabs.model.js +19 -19
  245. package/src/saas/internal-api/thread-scheduler/runner.js +69 -69
  246. package/src/saas/internal-api/thread-scheduler/schedulerJobs.js +8 -8
  247. package/src/saas/internal-api/uploadFiles/api/upload.file.api.js +49 -49
  248. package/src/saas/internal-api/uploadFiles/api/upload.file.service.js +162 -162
  249. package/src/saas/internal-api/uploadFiles/consts.js +36 -36
  250. package/src/saas/internal-api/uploadFiles/index.js +5 -5
  251. package/src/saas/internal-api/uploadFiles/utils.js +34 -34
  252. package/src/saas/internal-api/users/api/tenantApp/tenant.app.api.js +38 -38
  253. package/src/saas/internal-api/users/api/tenantApp/tenant.app.service.js +109 -109
  254. package/src/saas/internal-api/users/api/users.api.js +158 -158
  255. package/src/saas/internal-api/users/api/users.service.js +363 -363
  256. package/src/saas/internal-api/users/index.js +17 -17
  257. package/src/saas/internal-api/users/models/create.inner.system.user.model.js +18 -18
  258. package/src/saas/internal-api/users/models/notification.settings.model.js +15 -14
  259. package/src/saas/internal-api/users/models/tenant.user.model.js +11 -11
  260. package/src/saas/internal-api/users/models/users.model.js +43 -43
  261. package/src/saas/internal-api/users/utils/util.js +50 -49
  262. package/src/saas/internal-api/vendorProfile/api/vendor.profile.api.js +26 -26
  263. package/src/saas/internal-api/vendorProfile/api/vendor.profile.service.js +19 -19
  264. package/src/saas/internal-api/vendorProfile/index.js +3 -3
  265. package/src/saas/openapi/accounts/accounts.api.js +17 -17
  266. package/src/saas/openapi/accounts/accounts.service.js +11 -11
  267. package/src/saas/openapi/coi/coi.api.js +35 -35
  268. package/src/saas/openapi/coi/coi.service.js +53 -53
  269. package/src/saas/openapi/projects/projects.api.js +83 -83
  270. package/src/saas/openapi/projects/projects.service.js +71 -71
  271. package/src/saas/openapi/relatedDocs/related.docs.api.js +30 -30
  272. package/src/saas/openapi/relatedDocs/related.docs.service.js +55 -55
  273. package/src/saas/openapi/requests/index.js +7 -7
  274. package/src/saas/openapi/requests/models/invite.request.model.js +42 -42
  275. package/src/saas/openapi/requests/models/update.request.model.js +37 -37
  276. package/src/saas/openapi/requests/requests.api.js +93 -93
  277. package/src/saas/openapi/requests/requests.service.js +94 -94
  278. package/src/saas/openapi/requirements/index.js +6 -6
  279. package/src/saas/openapi/requirements/models/copy.requirement.model.js +10 -10
  280. package/src/saas/openapi/requirements/requirements.api.js +41 -41
  281. package/src/saas/openapi/requirements/requirements.service.js +55 -55
  282. package/src/saas/openapi/tabs/index.js +6 -6
  283. package/src/saas/openapi/tabs/models/create.tab.model.js +6 -6
  284. package/src/saas/openapi/tabs/tabs.api.js +27 -27
  285. package/src/saas/openapi/tabs/tabs.service.js +19 -19
  286. package/src/saas/openapi/users/user.model.js +10 -10
  287. package/src/saas/openapi/users/users.api.js +33 -33
  288. package/src/saas/openapi/users/users.service.js +51 -51
@@ -1,78 +1,78 @@
1
- const requests = require('../../../../common/requests/cookieAuth/requests');
2
- const { backendUrl } = require('../../../../env').getEnv();
3
-
4
- const Endpoints = {
5
- login: `${backendUrl}/logincontroller`,
6
- verifyEmail: `${backendUrl}/verify/email`,
7
- createOneTimeSession: `${backendUrl}/vendor-app/one-time-session/create`,
8
- verifyUser: `${backendUrl}/vendor-app/one-time-session/verify-user`,
9
- twoFAResendCode: `${backendUrl}/_saas/2fa/resend-code`,
10
- twoFAVerify: `${backendUrl}/_saas/2fa/verify`,
11
- getAuthenticatedUser: `${backendUrl}/authenticate/user`,
12
- isHubUser: email => `${backendUrl}/vendor-app/is-hub-user?email=${encodeURIComponent(email)}`,
13
- resetPassword: `${backendUrl}/reset-password`,
14
- loginAttempt: `${backendUrl}/saas/integration-tests/user-login-attempt`
15
- };
16
-
17
- const login = (email, password) => {
18
- return requests.postRequestHandler(Endpoints.login, { email, password });
19
- };
20
-
21
- const verifyEmail = email => {
22
- return requests.postRequestHandler(Endpoints.verifyEmail, { email });
23
- };
24
-
25
- const createOneTimeSession = email => {
26
- return requests.postRequestHandler(Endpoints.createOneTimeSession, { email });
27
- };
28
-
29
- const verifyUser = (email, oneTimeCode) => {
30
- return requests.postRequestHandler(Endpoints.verifyUser, { email, oneTimeCode });
31
- };
32
-
33
- const twoFAResendCode = (email, pendingSessionToken) => {
34
- return requests.postRequestHandler(Endpoints.twoFAResendCode, { email, pendingSessionToken });
35
- };
36
-
37
- const twoFAVerify = (email, code, pendingSessionToken) => {
38
- return requests.postRequestHandler(Endpoints.twoFAVerify, { email, code, pendingSessionToken });
39
- };
40
-
41
- const getAuthenticatedUser = context => {
42
- return requests.getRequestHandler(Endpoints.getAuthenticatedUser, {}, context);
43
- };
44
-
45
- const isHubUser = email => {
46
- return requests.postRequestHandler(Endpoints.isHubUser(email), null);
47
- };
48
-
49
- const resetPassword = (password, linkData) => {
50
- return requests.postRequestHandler(Endpoints.resetPassword, { password, linkData });
51
- };
52
-
53
- const getLoginAttempts = (email, context) => {
54
- return requests.getRequestHandler(Endpoints.loginAttempt, { email }, context);
55
- };
56
-
57
- const backdateLoginAttempt = (body, context) => {
58
- return requests.postRequestHandler(Endpoints.loginAttempt, body, context);
59
- };
60
-
61
- const deleteLoginAttempt = (email, context) => {
62
- return requests.deleteRequestHandler(Endpoints.loginAttempt, context, {}, { email });
63
- };
64
-
65
- module.exports = {
66
- login,
67
- verifyEmail,
68
- createOneTimeSession,
69
- verifyUser,
70
- twoFAResendCode,
71
- twoFAVerify,
72
- getAuthenticatedUser,
73
- isHubUser,
74
- resetPassword,
75
- getLoginAttempts,
76
- backdateLoginAttempt,
77
- deleteLoginAttempt
78
- };
1
+ const requests = require('../../../../common/requests/cookieAuth/requests');
2
+ const { backendUrl } = require('../../../../env').getEnv();
3
+
4
+ const Endpoints = {
5
+ login: `${backendUrl}/logincontroller`,
6
+ verifyEmail: `${backendUrl}/verify/email`,
7
+ createOneTimeSession: `${backendUrl}/vendor-app/one-time-session/create`,
8
+ verifyUser: `${backendUrl}/vendor-app/one-time-session/verify-user`,
9
+ twoFAResendCode: `${backendUrl}/_saas/2fa/resend-code`,
10
+ twoFAVerify: `${backendUrl}/_saas/2fa/verify`,
11
+ getAuthenticatedUser: `${backendUrl}/authenticate/user`,
12
+ isHubUser: email => `${backendUrl}/vendor-app/is-hub-user?email=${encodeURIComponent(email)}`,
13
+ resetPassword: `${backendUrl}/reset-password`,
14
+ loginAttempt: `${backendUrl}/saas/integration-tests/user-login-attempt`
15
+ };
16
+
17
+ const login = (email, password) => {
18
+ return requests.postRequestHandler(Endpoints.login, { email, password });
19
+ };
20
+
21
+ const verifyEmail = email => {
22
+ return requests.postRequestHandler(Endpoints.verifyEmail, { email });
23
+ };
24
+
25
+ const createOneTimeSession = email => {
26
+ return requests.postRequestHandler(Endpoints.createOneTimeSession, { email });
27
+ };
28
+
29
+ const verifyUser = (email, oneTimeCode) => {
30
+ return requests.postRequestHandler(Endpoints.verifyUser, { email, oneTimeCode });
31
+ };
32
+
33
+ const twoFAResendCode = (email, pendingSessionToken) => {
34
+ return requests.postRequestHandler(Endpoints.twoFAResendCode, { email, pendingSessionToken });
35
+ };
36
+
37
+ const twoFAVerify = (email, code, pendingSessionToken) => {
38
+ return requests.postRequestHandler(Endpoints.twoFAVerify, { email, code, pendingSessionToken });
39
+ };
40
+
41
+ const getAuthenticatedUser = context => {
42
+ return requests.getRequestHandler(Endpoints.getAuthenticatedUser, {}, context);
43
+ };
44
+
45
+ const isHubUser = email => {
46
+ return requests.postRequestHandler(Endpoints.isHubUser(email), null);
47
+ };
48
+
49
+ const resetPassword = (password, linkData) => {
50
+ return requests.postRequestHandler(Endpoints.resetPassword, { password, linkData });
51
+ };
52
+
53
+ const getLoginAttempts = (email, context) => {
54
+ return requests.getRequestHandler(Endpoints.loginAttempt, { email }, context);
55
+ };
56
+
57
+ const backdateLoginAttempt = (body, context) => {
58
+ return requests.postRequestHandler(Endpoints.loginAttempt, body, context);
59
+ };
60
+
61
+ const deleteLoginAttempt = (email, context) => {
62
+ return requests.deleteRequestHandler(Endpoints.loginAttempt, context, {}, { email });
63
+ };
64
+
65
+ module.exports = {
66
+ login,
67
+ verifyEmail,
68
+ createOneTimeSession,
69
+ verifyUser,
70
+ twoFAResendCode,
71
+ twoFAVerify,
72
+ getAuthenticatedUser,
73
+ isHubUser,
74
+ resetPassword,
75
+ getLoginAttempts,
76
+ backdateLoginAttempt,
77
+ deleteLoginAttempt
78
+ };
@@ -1,172 +1,206 @@
1
- const { getEnv, requiredValidation, getSystemUserIdentity, addUserIdentity } = require('../../../../env');
2
- const { credentials } = getEnv();
3
-
4
- const httpResponseStatusCodes = require('../../../../common/httpResponseStatusCodes.json');
5
-
6
- const authApi = require('./auth.api');
7
-
8
- const getAuthCookie = async (email, password) => {
9
- const systemUser = getSystemUserIdentity(email);
10
-
11
- if (systemUser) {
12
- return systemUser.cookie;
13
- }
14
-
15
- try {
16
- const response = await authApi.login(email, password);
17
-
18
- if (response.status !== httpResponseStatusCodes.OK) {
19
- throw Error(`Error: ${JSON.stringify(response.data)}`);
20
- }
21
-
22
- const authCookie = response.headers['set-cookie'].find(item => item.startsWith('JonesToken='));
23
-
24
- addUserIdentity(email, authCookie, response.data.user.id);
25
-
26
- return authCookie;
27
- } catch (error) {
28
- throw new Error(`Failed to login with email: ${email}\nError: ${error}`);
29
- }
30
- };
31
-
32
- const verifyEmail = email => {
33
- return authApi.verifyEmail(email);
34
- };
35
-
36
- const createOneTimeSession = email => {
37
- return authApi.createOneTimeSession(email);
38
- };
39
-
40
- const getHubUserCookie = async (email, oneTimeCode) => {
41
- try {
42
- const response = await authApi.verifyUser(email, oneTimeCode);
43
-
44
- if (response.status !== httpResponseStatusCodes.OK && response.status !== httpResponseStatusCodes.NO_CONTENT) {
45
- throw Error(`Error: ${JSON.stringify(response.data)}`);
46
- }
47
-
48
- const authCookie = response.headers['set-cookie'].find(item => item.startsWith('JonesToken='));
49
-
50
- return authCookie;
51
- } catch (error) {
52
- throw new Error(`Failed to login to vendor hub by email:${email}`, error);
53
- }
54
- };
55
-
56
- const getIcsCookie = () => {
57
- const { superUser, superUserPassword } = credentials;
58
-
59
- requiredValidation({
60
- 'credentials.superUser': superUser,
61
- 'credentials.superUserPassword': superUserPassword
62
- });
63
- return getAuthCookie(superUser, superUserPassword);
64
- };
65
-
66
- const getAuditorCookie = () => {
67
- const { auditorUser, auditorPassword } = credentials;
68
- requiredValidation({
69
- 'credentials.auditorUser': auditorUser,
70
- 'credentials.auditorPassword': auditorPassword
71
- });
72
- return getAuthCookie(auditorUser, auditorPassword);
73
- };
74
-
75
- const getOperatorCookie = () => {
76
- const { operatorUser, operatorPassword } = credentials;
77
- requiredValidation({
78
- 'credentials.operatorUser': operatorUser,
79
- 'credentials.operatorPassword': operatorPassword
80
- });
81
- return getAuthCookie(operatorUser, operatorPassword);
82
- };
83
-
84
- const login = (email, password) => {
85
- return authApi.login(email, password);
86
- };
87
-
88
- const twoFAResendCode = (email, pendingSessionToken) => {
89
- return authApi.twoFAResendCode(email, pendingSessionToken);
90
- };
91
-
92
- const twoFAVerify = (email, code, pendingSessionToken) => {
93
- return authApi.twoFAVerify(email, code, pendingSessionToken);
94
- };
95
-
96
- const getAuthenticatedUser = context => {
97
- return authApi.getAuthenticatedUser(context);
98
- };
99
-
100
- const isHubUser = async (email, { expectError } = {}) => {
101
- const response = await authApi.isHubUser(email);
102
-
103
- if (!expectError && response.status !== httpResponseStatusCodes.OK) {
104
- throw new Error(`is-hub-user failed for ${email}: ${JSON.stringify(response.data)}`);
105
- }
106
-
107
- return response.data;
108
- };
109
-
110
- const resetPassword = async (password, linkData, { expectError = false } = {}) => {
111
- const response = await authApi.resetPassword(password, linkData);
112
-
113
- if (!expectError && response.status !== httpResponseStatusCodes.OK) {
114
- throw Error(`Failed to reset password. Status code: ${response.status}`);
115
- }
116
-
117
- return response;
118
- };
119
-
120
- // Reads the user_login_attempt row via the ICS-secured test-only endpoint.
121
- // A 404 (no row ever created) is a distinct state from a cleared row (200, counter 0, null dates);
122
- // pass { expectError: true } to receive the raw response and tell them apart, otherwise the
123
- // wrapper throws on any non-200 rather than flattening a 404 into a zeroed row.
124
- const getLoginAttempts = async (email, { expectError } = {}) => {
125
- const response = await authApi.getLoginAttempts(email, await getIcsCookie());
126
-
127
- if (!expectError && response.status !== httpResponseStatusCodes.OK) {
128
- throw new Error(`getLoginAttempts failed for ${email}: ${JSON.stringify(response.data)}`);
129
- }
130
-
131
- return expectError ? response : response.data;
132
- };
133
-
134
- // Backdates the failed-login timestamps for an existing row. The endpoint returns 204 No Content.
135
- const backdateLoginAttempt = async (email, { dateLastFailedLogin, dateFirstFailedLogin } = {}) => {
136
- const response = await authApi.backdateLoginAttempt(
137
- { email, dateLastFailedLogin, dateFirstFailedLogin }, await getIcsCookie());
138
-
139
- if (response.status !== httpResponseStatusCodes.NO_CONTENT && response.status !== httpResponseStatusCodes.OK) {
140
- throw new Error(`backdateLoginAttempt failed for ${email}: ${JSON.stringify(response.data)}`);
141
- }
142
- };
143
-
144
- // Clears the user_login_attempt row for an email via the ICS-secured test-only endpoint.
145
- // Idempotent: the endpoint returns 204 whether or not a row existed, so this is safe to call
146
- // on non-existent-email subjects when resetting lockout state between runs.
147
- const deleteLoginAttempt = async email => {
148
- const response = await authApi.deleteLoginAttempt(email, await getIcsCookie());
149
-
150
- if (response.status !== httpResponseStatusCodes.NO_CONTENT && response.status !== httpResponseStatusCodes.OK) {
151
- throw new Error(`deleteLoginAttempt failed for ${email}: ${JSON.stringify(response.data)}`);
152
- }
153
- };
154
-
155
- module.exports = {
156
- getAuthCookie,
157
- verifyEmail,
158
- createOneTimeSession,
159
- getHubUserCookie,
160
- getIcsCookie,
161
- getAuditorCookie,
162
- getOperatorCookie,
163
- login,
164
- twoFAResendCode,
165
- twoFAVerify,
166
- getAuthenticatedUser,
167
- isHubUser,
168
- resetPassword,
169
- getLoginAttempts,
170
- backdateLoginAttempt,
171
- deleteLoginAttempt
172
- };
1
+ const { getEnv, requiredValidation, getSystemUserIdentity, addUserIdentity } = require('../../../../env');
2
+ const { credentials } = getEnv();
3
+
4
+ const httpResponseStatusCodes = require('../../../../common/httpResponseStatusCodes.json');
5
+
6
+ const authApi = require('./auth.api');
7
+ const timeUtils = require('../../../../common/utils/timeUtils');
8
+
9
+ const RETRYABLE_LOGIN_STATUSES = [
10
+ httpResponseStatusCodes.BAD_GATEWAY,
11
+ httpResponseStatusCodes.SERVICE_UNAVAILABLE,
12
+ httpResponseStatusCodes.GATEWAY_TIMEOUT
13
+ ];
14
+ const MAX_LOGIN_ATTEMPTS = 3;
15
+ const LOGIN_RETRY_DELAY_SECONDS = 1;
16
+
17
+ // Parallel callers for the same user share one login request
18
+ const pendingLogins = new Map();
19
+
20
+ const getAuthCookie = async (email, password) => {
21
+ const systemUser = getSystemUserIdentity(email);
22
+
23
+ if (systemUser) {
24
+ return systemUser.cookie;
25
+ }
26
+
27
+ if (!pendingLogins.has(email)) {
28
+ const login = loginAndCacheCookie(email, password).finally(() => pendingLogins.delete(email));
29
+ pendingLogins.set(email, login);
30
+ }
31
+
32
+ return pendingLogins.get(email);
33
+ };
34
+
35
+ const loginWithRetry = async (email, password) => {
36
+ for (let attempt = 1; ; attempt++) {
37
+ const response = await authApi.login(email, password);
38
+
39
+ if (!RETRYABLE_LOGIN_STATUSES.includes(response.status) || attempt === MAX_LOGIN_ATTEMPTS) {
40
+ return response;
41
+ }
42
+
43
+ console.warn(`Login for ${email} failed with status ${response.status}, retrying`);
44
+ await timeUtils.waitFor(LOGIN_RETRY_DELAY_SECONDS).seconds;
45
+ }
46
+ };
47
+
48
+ const loginAndCacheCookie = async (email, password) => {
49
+ try {
50
+ const response = await loginWithRetry(email, password);
51
+
52
+ if (response.status !== httpResponseStatusCodes.OK) {
53
+ throw Error(`Error: ${JSON.stringify(response.data)}`);
54
+ }
55
+
56
+ const authCookie = response.headers['set-cookie'].find(item => item.startsWith('JonesToken='));
57
+
58
+ addUserIdentity(email, authCookie, response.data.user.id);
59
+
60
+ return authCookie;
61
+ } catch (error) {
62
+ throw new Error(`Failed to login with email: ${email}\nError: ${error}`);
63
+ }
64
+ };
65
+
66
+ const verifyEmail = email => {
67
+ return authApi.verifyEmail(email);
68
+ };
69
+
70
+ const createOneTimeSession = email => {
71
+ return authApi.createOneTimeSession(email);
72
+ };
73
+
74
+ const getHubUserCookie = async (email, oneTimeCode) => {
75
+ try {
76
+ const response = await authApi.verifyUser(email, oneTimeCode);
77
+
78
+ if (response.status !== httpResponseStatusCodes.OK && response.status !== httpResponseStatusCodes.NO_CONTENT) {
79
+ throw Error(`Error: ${JSON.stringify(response.data)}`);
80
+ }
81
+
82
+ const authCookie = response.headers['set-cookie'].find(item => item.startsWith('JonesToken='));
83
+
84
+ return authCookie;
85
+ } catch (error) {
86
+ throw new Error(`Failed to login to vendor hub by email:${email}`, error);
87
+ }
88
+ };
89
+
90
+ const getIcsCookie = () => {
91
+ const { superUser, superUserPassword } = credentials;
92
+
93
+ requiredValidation({
94
+ 'credentials.superUser': superUser,
95
+ 'credentials.superUserPassword': superUserPassword
96
+ });
97
+ return getAuthCookie(superUser, superUserPassword);
98
+ };
99
+
100
+ const getAuditorCookie = () => {
101
+ const { auditorUser, auditorPassword } = credentials;
102
+ requiredValidation({
103
+ 'credentials.auditorUser': auditorUser,
104
+ 'credentials.auditorPassword': auditorPassword
105
+ });
106
+ return getAuthCookie(auditorUser, auditorPassword);
107
+ };
108
+
109
+ const getOperatorCookie = () => {
110
+ const { operatorUser, operatorPassword } = credentials;
111
+ requiredValidation({
112
+ 'credentials.operatorUser': operatorUser,
113
+ 'credentials.operatorPassword': operatorPassword
114
+ });
115
+ return getAuthCookie(operatorUser, operatorPassword);
116
+ };
117
+
118
+ const login = (email, password) => {
119
+ return authApi.login(email, password);
120
+ };
121
+
122
+ const twoFAResendCode = (email, pendingSessionToken) => {
123
+ return authApi.twoFAResendCode(email, pendingSessionToken);
124
+ };
125
+
126
+ const twoFAVerify = (email, code, pendingSessionToken) => {
127
+ return authApi.twoFAVerify(email, code, pendingSessionToken);
128
+ };
129
+
130
+ const getAuthenticatedUser = context => {
131
+ return authApi.getAuthenticatedUser(context);
132
+ };
133
+
134
+ const isHubUser = async (email, { expectError } = {}) => {
135
+ const response = await authApi.isHubUser(email);
136
+
137
+ if (!expectError && response.status !== httpResponseStatusCodes.OK) {
138
+ throw new Error(`is-hub-user failed for ${email}: ${JSON.stringify(response.data)}`);
139
+ }
140
+
141
+ return response.data;
142
+ };
143
+
144
+ const resetPassword = async (password, linkData, { expectError = false } = {}) => {
145
+ const response = await authApi.resetPassword(password, linkData);
146
+
147
+ if (!expectError && response.status !== httpResponseStatusCodes.OK) {
148
+ throw Error(`Failed to reset password. Status code: ${response.status}`);
149
+ }
150
+
151
+ return response;
152
+ };
153
+
154
+ // Reads the user_login_attempt row via the ICS-secured test-only endpoint.
155
+ // A 404 (no row ever created) is a distinct state from a cleared row (200, counter 0, null dates);
156
+ // pass { expectError: true } to receive the raw response and tell them apart, otherwise the
157
+ // wrapper throws on any non-200 rather than flattening a 404 into a zeroed row.
158
+ const getLoginAttempts = async (email, { expectError } = {}) => {
159
+ const response = await authApi.getLoginAttempts(email, await getIcsCookie());
160
+
161
+ if (!expectError && response.status !== httpResponseStatusCodes.OK) {
162
+ throw new Error(`getLoginAttempts failed for ${email}: ${JSON.stringify(response.data)}`);
163
+ }
164
+
165
+ return expectError ? response : response.data;
166
+ };
167
+
168
+ // Backdates the failed-login timestamps for an existing row. The endpoint returns 204 No Content.
169
+ const backdateLoginAttempt = async (email, { dateLastFailedLogin, dateFirstFailedLogin } = {}) => {
170
+ const response = await authApi.backdateLoginAttempt(
171
+ { email, dateLastFailedLogin, dateFirstFailedLogin }, await getIcsCookie());
172
+
173
+ if (response.status !== httpResponseStatusCodes.NO_CONTENT && response.status !== httpResponseStatusCodes.OK) {
174
+ throw new Error(`backdateLoginAttempt failed for ${email}: ${JSON.stringify(response.data)}`);
175
+ }
176
+ };
177
+
178
+ // Clears the user_login_attempt row for an email via the ICS-secured test-only endpoint.
179
+ // Idempotent: the endpoint returns 204 whether or not a row existed, so this is safe to call
180
+ // on non-existent-email subjects when resetting lockout state between runs.
181
+ const deleteLoginAttempt = async email => {
182
+ const response = await authApi.deleteLoginAttempt(email, await getIcsCookie());
183
+
184
+ if (response.status !== httpResponseStatusCodes.NO_CONTENT && response.status !== httpResponseStatusCodes.OK) {
185
+ throw new Error(`deleteLoginAttempt failed for ${email}: ${JSON.stringify(response.data)}`);
186
+ }
187
+ };
188
+
189
+ module.exports = {
190
+ getAuthCookie,
191
+ verifyEmail,
192
+ createOneTimeSession,
193
+ getHubUserCookie,
194
+ getIcsCookie,
195
+ getAuditorCookie,
196
+ getOperatorCookie,
197
+ login,
198
+ twoFAResendCode,
199
+ twoFAVerify,
200
+ getAuthenticatedUser,
201
+ isHubUser,
202
+ resetPassword,
203
+ getLoginAttempts,
204
+ backdateLoginAttempt,
205
+ deleteLoginAttempt
206
+ };
@@ -1,3 +1,3 @@
1
- const services = require('./api/auth.service');
2
-
3
- module.exports = { services };
1
+ const services = require('./api/auth.service');
2
+
3
+ module.exports = { services };