@getjones/test-infra 1.11.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/package.json +1 -1
  2. package/src/common/factory/records/records.js +26 -0
  3. package/src/common/utils/timeUtils.js +16 -1
  4. package/src/index.js +5 -3
  5. package/src/saas/internal-api/contractors/api/contractors.api.js +2 -14
  6. package/src/saas/internal-api/contractors/api/contractors.service.js +0 -7
  7. package/src/saas/internal-api/contractors/models/create.contractor.model.js +2 -2
  8. package/src/saas/internal-api/contractors/models/edit.contractor.model.js +1 -10
  9. package/src/saas/internal-api/dbEmails/api/db.emails.api.js +1 -1
  10. package/src/saas/internal-api/dbEmails/api/db.emails.service.js +111 -3
  11. package/src/saas/internal-api/dbEmails/consts/consts.js +3 -0
  12. package/src/saas/internal-api/dbEmails/index.js +2 -1
  13. package/src/saas/internal-api/dbEmails/models/db.emails.model.js +1 -1
  14. package/src/saas/internal-api/dbEmails/utils/util.js +59 -0
  15. package/src/saas/internal-api/requests/models/edit.request.model.js +1 -1
  16. package/src/saas/internal-api/requests/utils.js +8 -0
  17. package/src/saas/internal-api/users/api/users.api.js +2 -3
  18. package/src/saas/internal-api/users/api/users.service.js +2 -2
  19. package/src/saas/openapi/requests/index.js +6 -0
  20. package/src/saas/openapi/{contractors/models/invite.contractor.model.js → requests/models/invite.request.model.js} +2 -2
  21. package/src/saas/openapi/requests/requests.api.js +20 -0
  22. package/src/saas/openapi/requests/requests.service.js +18 -0
  23. package/src/saas/internal-api/requests/models/validation.models.js +0 -8
  24. package/src/saas/openapi/contractors/contractors.api.js +0 -20
  25. package/src/saas/openapi/contractors/contractors.service.js +0 -18
  26. package/src/saas/openapi/contractors/index.js +0 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getjones/test-infra",
3
- "version": "1.11.0",
3
+ "version": "2.0.0",
4
4
  "description": "Providing internal and openapi interface",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -31,6 +31,30 @@ const updateInviteDate = async function(recordId, inviteDate, context) {
31
31
  await timeUtils.waitFor(2.5).seconds; // calls for the same records can override each other
32
32
  };
33
33
 
34
+ const runOverAllRenewalDatesForRecord = async function(recordId, policyName) {
35
+ const dates = timeUtils.getAutomaticRenewalsExpirationDates();
36
+
37
+ for (const date of dates) {
38
+ await updatePolicyExpiryDateForRecord(recordId, date, policyName);
39
+ }
40
+ };
41
+
42
+ const updatePolicyExpiryDateForRecord = async function(recordId, expiryDate, policyName) {
43
+ const updateResponse = await contractors.services.updateExpiryDate(recordId, expiryDate, policyName);
44
+
45
+ if (updateResponse.status !== httpResponseStatusCodes.NO_CONTENT) {
46
+ throw new Error('Record expiry date could not be updated', updateResponse);
47
+ }
48
+
49
+ const threadSchedulerResponse = await threadScheduler.runThreadScheduler({ contractorIds: [recordId] });
50
+
51
+ if (threadSchedulerResponse.status !== httpResponseStatusCodes.OK) {
52
+ throw new Error('Thread scheduler has failed to run', threadSchedulerResponse);
53
+ }
54
+
55
+ await timeUtils.waitFor(2.5).seconds; // calls for the same records can override each other
56
+ };
57
+
34
58
  const getHistoryEvents = async function(recordId, context) {
35
59
  const recordHistory = await contractors.services.getRecordHistory(recordId, context);
36
60
  expect(recordHistory.status, 'Expected record history response status to equal 200.').to.equal(httpResponseStatusCodes.OK);
@@ -40,6 +64,8 @@ const getHistoryEvents = async function(recordId, context) {
40
64
 
41
65
  module.exports = {
42
66
  makeRecordNotResponsive,
67
+ runOverAllRenewalDatesForRecord,
43
68
  updateInviteDate,
69
+ updatePolicyExpiryDateForRecord,
44
70
  getHistoryEvents
45
71
  };
@@ -115,6 +115,19 @@ const getInvitationDatesForNotResponsiveTenant = function() {
115
115
  return [fiveDaysAgoUtc, tenDaysAgoUtc, fifteenDaysAgoUtc];
116
116
  };
117
117
 
118
+ const isDateAfterOther = (date, other) => {
119
+ return moment(date).isAfter(other);
120
+ };
121
+
122
+ const getAutomaticRenewalsExpirationDates = function() {
123
+ const inTwentyNineDaysUtc = getDateinTwentyNineDays();
124
+ const inThirteenDaysUtc = getDateinThirteenDays();
125
+ const inSixDaysUtc = getDateinSixDays();
126
+ const todayUtc = getCurrentDate();
127
+
128
+ return [inTwentyNineDaysUtc, inThirteenDaysUtc, inSixDaysUtc, todayUtc];
129
+ };
130
+
118
131
  module.exports = {
119
132
  formats,
120
133
  getOneYearAgoDate,
@@ -134,6 +147,7 @@ module.exports = {
134
147
  getDateinTwentyNineDays,
135
148
  getInvitationDatesForNotResponsiveVendor,
136
149
  getInvitationDatesForNotResponsiveTenant,
150
+ getAutomaticRenewalsExpirationDates,
137
151
  getLogTimestamp,
138
152
  getCurrentFormattedDate,
139
153
  getAuditDateFormat,
@@ -143,5 +157,6 @@ module.exports = {
143
157
  getDayInMilliseconds,
144
158
  extractDateFromDateTime,
145
159
  getPreviousDateByDays,
146
- waitFor
160
+ waitFor,
161
+ isDateAfterOther
147
162
  };
package/src/index.js CHANGED
@@ -31,6 +31,7 @@ const getInternalAPI = () => {
31
31
  const serviceArea = require('./saas/internal-api/serviceArea');
32
32
 
33
33
  const threadScheduler = require('./saas/internal-api/thread-scheduler/runner');
34
+ const dbEmails = require('./saas/internal-api/dbEmails/index');
34
35
 
35
36
  const internalAPI = {
36
37
  auth,
@@ -48,7 +49,8 @@ const getInternalAPI = () => {
48
49
  globalRecord,
49
50
  vendorProfile,
50
51
  serviceArea,
51
- threadScheduler
52
+ threadScheduler,
53
+ dbEmails
52
54
  };
53
55
 
54
56
  return internalAPI;
@@ -57,10 +59,10 @@ const getInternalAPI = () => {
57
59
  const getOpenAPI = () => {
58
60
  const accounts = require('./saas/openapi/accounts/accounts.service');
59
61
  const tabs = require('./saas/openapi/tabs/tabs.service');
60
- const contractors = require('./saas/openapi/contractors');
62
+ const requests = require('./saas/openapi/requests');
61
63
  const projects = require('./saas/openapi/projects/projects.service');
62
64
  const requirements = require('./saas/openapi/requirements');
63
- const openAPI = { accounts, tabs, contractors, projects, requirements };
65
+ const openAPI = { accounts, tabs, requests, projects, requirements };
64
66
  return openAPI;
65
67
  };
66
68
 
@@ -19,7 +19,6 @@ const Endpoints = {
19
19
  changeRequirement: `${backendUrl}/saas/contractor/requirement`,
20
20
  updateVendorExpiryDate: contractorId => `${backendUrl}/_saas/automation/contractor/${contractorId}/expiry-date`,
21
21
  updateContractorInviteDate: contractorId => `${backendUrl}/_saas/automation/contractor/${contractorId}/invite-date`,
22
- assignMptToProperties: (accountId, tenantId) => `${backendUrl}/saas/account/${accountId}/multi-properties/${tenantId}`,
23
22
  searchInAutocomplete: ({ tabId, searchWord }) =>
24
23
  `${backendUrl}/saas/contractors/search/audited?&tabId=${tabId}&searchWord=${searchWord}`,
25
24
  automationUpdateContractorUploadDate: contractorId => `${backendUrl}/saas/automation/contractor/${contractorId}/upload-date`,
@@ -85,7 +84,8 @@ const requestNewCoiExpired = (recordModifyDateVerificationModel, context) => {
85
84
  };
86
85
 
87
86
  const resendInvitation = (recordModifyDateVerificationModel, context) => {
88
- return requests.postRequestHandler(Endpoints.resendInvitation, recordModifyDateVerificationModel, context);
87
+ const recordId = recordModifyDateVerificationModel.contractorId;
88
+ return requests.postRequestHandler(Endpoints.resendInvitation(recordId), recordModifyDateVerificationModel, context);
89
89
  };
90
90
 
91
91
  const updateExpiryDate = (contractorId, expiryDate, policyName) => {
@@ -98,17 +98,6 @@ const updateInviteDate = (contractorId, inviteDate, context) => {
98
98
  return requests.postRequestHandler(Endpoints.updateContractorInviteDate(contractorId), data, context);
99
99
  };
100
100
 
101
- const assignMptToProperties = (assignToMptModel, context) => {
102
- const params = { updateInfoUser: 'EditVendor' };
103
- return requests.postRequestHandler(
104
- Endpoints.assignMptToProperties(assignToMptModel.accountId, assignToMptModel.tenantId),
105
- assignToMptModel.properties,
106
- context,
107
- {},
108
- params
109
- );
110
- };
111
-
112
101
  const getContractorsByTabId = async (tabId, context, activityStatus) => {
113
102
  const body = { tabId, activityStatus };
114
103
  const response = await requests.postRequestHandler(Endpoints.get, body, context);
@@ -145,7 +134,6 @@ module.exports = {
145
134
  editContractor,
146
135
  updateInviteDate,
147
136
  updateExpiryDate,
148
- assignMptToProperties,
149
137
  getContractorsByTabId,
150
138
  searchInAutocomplete,
151
139
  updateContractorUploadDate,
@@ -1,6 +1,5 @@
1
1
  const contractorsAPI = require('./contractors.api');
2
2
  const { CreateContractorModel } = require('../models/create.contractor.model');
3
- const { MptModel } = require('../models/edit.contractor.model');
4
3
  const { RequestModel } = require('../../requests/models/edit.request.model');
5
4
  const { validateType } = require('../../../../common/validations/typeValidations');
6
5
  const { RecordModifyDateVerificationModel } = require('../models/verification.contractor.model');
@@ -56,11 +55,6 @@ const getContractorsByTabId = (tabId, context, activityStatus = 'ACTIVE') => {
56
55
  return contractorsAPI.getContractorsByTabId(tabId, context, activityStatus);
57
56
  };
58
57
 
59
- const assignMptToProperties = (assignToMptModel, context) => {
60
- validateType(assignToMptModel, MptModel);
61
- return contractorsAPI.assignMptToProperties(assignToMptModel, context);
62
- };
63
-
64
58
  const searchInAutoComplete = ({ tabId, searchWord }, context) => {
65
59
  return contractorsAPI.searchInAutocomplete({ tabId, searchWord }, context);
66
60
  };
@@ -123,7 +117,6 @@ module.exports = {
123
117
  updateInviteDate,
124
118
  updateExpiryDate,
125
119
  getContractorsByTabId,
126
- assignMptToProperties,
127
120
  searchInAutoComplete,
128
121
  updateContractorUploadDate,
129
122
  inviteContractorViaPublicLink,
@@ -1,10 +1,10 @@
1
1
  const { validateType } = require('../../../../common/validations/typeValidations');
2
2
 
3
- function CreateContractorModel(requirementId, inviterEmail, vendorInfo, { tabId = null, disableMail = true, publicLink } = {}) {
3
+ function CreateContractorModel(requirementId, inviterEmail, vendorInfo, { tabId = null, sendMail = false, publicLink } = {}) {
4
4
  this.reqId = requirementId;
5
5
  this.inviterEmail = inviterEmail;
6
6
  this.vendorInfo = vendorInfo;
7
- this.disableMail = disableMail;
7
+ this.disableMail = !sendMail;
8
8
  this.tabId = tabId;
9
9
  this.publicLink = publicLink;
10
10
 
@@ -54,16 +54,7 @@ class ContractorDetailsModel {
54
54
  }
55
55
  }
56
56
 
57
- class MptModel {
58
- constructor(accountId, tenantId, properties) {
59
- this.accountId = accountId;
60
- this.tenantId = tenantId;
61
- this.properties = properties;
62
- }
63
- }
64
-
65
57
  module.exports = {
66
58
  ContractorModel,
67
- ContractorDetailsModel,
68
- MptModel
59
+ ContractorDetailsModel
69
60
  };
@@ -11,7 +11,7 @@ const getAllMessages = emailModel => {
11
11
  };
12
12
 
13
13
  const deleteMultipleMessages = emailIds => {
14
- return requests.deleteRequestHandler(Endpoints.dbEmails, { data: emailIds });
14
+ return requests.deleteRequestHandler(Endpoints.dbEmails, {}, {}, emailIds);
15
15
  };
16
16
 
17
17
  const deleteAllMessages = () => {
@@ -1,19 +1,127 @@
1
1
  const dbEmailsApi = require('./db.emails.api');
2
+ const util = require('../utils/util');
3
+ const timeUtils = require('../../../../common/utils/timeUtils');
4
+ const httpResponseStatusCodes = require('../../../../common/httpResponseStatusCodes.json');
5
+ const { EmailModel } = require('../models/db.emails.model');
6
+
7
+ const strict = 'strict';
2
8
 
3
9
  const getAllMessages = emailModel => {
4
- return dbEmailsApi.postRequestHandler(Endpoints.dbEmails, emailModel);
10
+ return dbEmailsApi.getAllMessages(emailModel);
5
11
  };
6
12
 
7
13
  const deleteMultipleMessages = emailIds => {
8
- return dbEmailsApi.deleteRequestHandler(Endpoints.dbEmails, { data: emailIds });
14
+ return dbEmailsApi.deleteMultipleMessages(emailIds);
9
15
  };
10
16
 
11
17
  const deleteAllMessages = () => {
12
- return dbEmailsApi.deleteRequestHandler(Endpoints.deleteAllDbEmails);
18
+ return dbEmailsApi.deleteAllMessages();
19
+ };
20
+
21
+ const getLastMessage = async (
22
+ {
23
+ recipients,
24
+ recipientsVerification = strict,
25
+ textInSubject,
26
+ textInBody,
27
+ excludingPhrasesInBody,
28
+ regex,
29
+ returnType
30
+ } = {}
31
+ ) => {
32
+ async function getLatestMessage(messages) {
33
+ for (const message of messages) {
34
+ /* The query we use to search for messages guarantees the recipients are included,
35
+ but it doesn't guarantee other emails aren't in to, cc or bcc */
36
+ let emailsMatch = true;
37
+
38
+ if (recipientsVerification === strict) {
39
+ const emptyArray = [''];
40
+
41
+ const expectedRecipients = {
42
+ from: util.extractEmailFromNameAndEmailFormat(recipients.from),
43
+ to: recipients.to || emptyArray,
44
+ cc: recipients.cc || emptyArray
45
+ };
46
+
47
+ const actualRecipients = {
48
+ from: util.extractEmailFromNameAndEmailFormat(message.from),
49
+ to: message.recipientsTo || emptyArray,
50
+ cc: message.recipientsCc || emptyArray
51
+ };
52
+
53
+ emailsMatch = util.recipientsMatchVerification(expectedRecipients, actualRecipients);
54
+ }
55
+
56
+ if (!emailsMatch) {
57
+ continue;
58
+ }
59
+
60
+ const result = regex ? util.regexVerification(message.body, regex, { returnType }) : message.body;
61
+
62
+ const isMessageNewest = timeUtils.isDateAfterOther(message.insertedTime, newestDateTime);
63
+
64
+ if (result && (!newestResult || !newestId || isMessageNewest)) {
65
+ newestResult = result;
66
+ newestId = message.id;
67
+ newestDateTime = message.insertedTime;
68
+
69
+ // Used for logging purposes only
70
+ newestTo = message.recipientsTo;
71
+ newestCc = message.recipientsCc;
72
+ newestSubject = message.subject;
73
+ }
74
+ }
75
+ }
76
+
77
+ let newestDateTime = '2020-01-01T01:01:01.000+0000';
78
+ let newestId, newestResult, newestTo, newestCc, newestSubject;
79
+
80
+ let recipientsTo = recipients.to;
81
+ let includesOneOfRecipientsTo;
82
+
83
+ if (recipientsVerification !== strict) {
84
+ recipientsTo = null;
85
+ includesOneOfRecipientsTo = recipients.to;
86
+ }
87
+
88
+ // In case the format is 'First Last <username@domain.com>' we need the email part only
89
+ const emailModel = new EmailModel(
90
+ util.extractEmailFromNameAndEmailFormat(recipients.from),
91
+ recipientsTo,
92
+ includesOneOfRecipientsTo,
93
+ recipients.cc,
94
+ textInSubject,
95
+ textInBody,
96
+ excludingPhrasesInBody
97
+ );
98
+
99
+ const response = await getAllMessages(emailModel);
100
+
101
+ if (response.status !== httpResponseStatusCodes.OK) {
102
+ throw new Error('Inbox messages could not be retrieved', response);
103
+ }
104
+
105
+ await getLatestMessage(response.data);
106
+
107
+ if (newestId) {
108
+ util.logRetrievedEmailInfo(newestTo, newestSubject, { cc: newestCc });
109
+
110
+ const response = await deleteMultipleMessages([newestId]);
111
+
112
+ if (response.status !== httpResponseStatusCodes.NO_CONTENT) {
113
+ throw new Error(`Failed to delete email with ID : ${newestId}`, response);
114
+ }
115
+ }
116
+
117
+ return newestResult;
13
118
  };
14
119
 
15
120
  module.exports = {
121
+ util,
122
+
16
123
  getAllMessages,
124
+ getLastMessage,
17
125
  deleteMultipleMessages,
18
126
  deleteAllMessages
19
127
  };
@@ -0,0 +1,3 @@
1
+ const DEFAULT_EMAIL_SENDER = 'hellogetjonestest@gmail.com';
2
+
3
+ module.exports = { DEFAULT_EMAIL_SENDER };
@@ -1,3 +1,4 @@
1
1
  const services = require('./api/db.emails.service');
2
+ const consts = require('./consts/consts');
2
3
 
3
- module.exports = { services };
4
+ module.exports = { services, consts };
@@ -18,4 +18,4 @@ class EmailModel {
18
18
  }
19
19
  }
20
20
 
21
- module.exports = EmailModel;
21
+ module.exports = { EmailModel };
@@ -0,0 +1,59 @@
1
+ const compareUnorderedArrays = (arr, other, { caseSensitive = true } = {}) => {
2
+ const isEachElementEqual = arr.sort().every((mail, i) => {
3
+ if (caseSensitive) {
4
+ return mail === other.sort()[i];
5
+ } else {
6
+ return mail.toLowerCase() === other.sort()[i].toLowerCase();
7
+ }
8
+ });
9
+ return arr.length === other.length && isEachElementEqual;
10
+ };
11
+
12
+ const recipientsMatchVerification = (expectedRecipients, actualRecipients) => {
13
+ const caseSensitive = false;
14
+
15
+ return expectedRecipients.from.includes(actualRecipients.from) && // For some emails can be few sendor options (ex: branded emails)
16
+ compareUnorderedArrays(actualRecipients.to, expectedRecipients.to, { caseSensitive }) &&
17
+ compareUnorderedArrays(actualRecipients.cc, expectedRecipients.cc, { caseSensitive });
18
+ };
19
+
20
+ const regexVerification = (message, regex, { returnType } = {}) => {
21
+ const capturingGroupsArr = message.match(regex);
22
+
23
+ if (!capturingGroupsArr || capturingGroupsArr.length < 1) {
24
+ return null;
25
+ }
26
+
27
+ const capturingGroups = capturingGroupsArr[capturingGroupsArr.length - 1];
28
+
29
+ if (!capturingGroups || capturingGroups.length < 2) {
30
+ return null;
31
+ }
32
+
33
+ switch (returnType) {
34
+ case 'url':
35
+ return typeof capturingGroups === 'string' ? capturingGroups : capturingGroups[capturingGroups.length - 1];
36
+ case 'body':
37
+ return message;
38
+ default:
39
+ return 'Bad "returnType" argument';
40
+ }
41
+ };
42
+
43
+ const extractEmailFromNameAndEmailFormat = str => {
44
+ // In case the format is 'First Last <username@domain.com>' we will return username@domain.com only
45
+ return str.split('<').pop().split('>')[0];
46
+ };
47
+ const logRetrievedEmailInfo = (to, subject, { cc } = {}) => {
48
+ let log = 'The following email retrieved and will be sent to trash:';
49
+ log += `\n| To: ${to}`;
50
+ cc ? log += `\n| Cc: ${cc}` : '';
51
+ log += `\n| Subject: ${subject}`;
52
+ };
53
+
54
+ module.exports = {
55
+ recipientsMatchVerification,
56
+ regexVerification,
57
+ extractEmailFromNameAndEmailFormat,
58
+ logRetrievedEmailInfo
59
+ };
@@ -1,5 +1,5 @@
1
1
  const { validateType } = require('../../../../common/validations/typeValidations');
2
- const { validateContractorModel } = require('../models/validation.models');
2
+ const { validateContractorModel } = require('../utils');
3
3
 
4
4
  class RequestModel {
5
5
  constructor(id, record, tabModel, tenantRequest) {
@@ -0,0 +1,8 @@
1
+ const { validateType } = require('../../../common/validations/typeValidations');
2
+ const { ContractorModel } = require('../contractors/models/edit.contractor.model');
3
+
4
+ function validateContractorModel(record) {
5
+ validateType(record, ContractorModel);
6
+ }
7
+
8
+ module.exports = { validateContractorModel };
@@ -16,9 +16,8 @@ const Endpoints = {
16
16
  removeAllUserTraceFromDb: userId => `${backendUrl}/saas/user/automation/${userId}`
17
17
  };
18
18
 
19
- const invite = (invitedUser, context) => {
20
- const params = { disableSendMail: true };
21
- return requests.putRequestHandler(Endpoints.invite, invitedUser, context, {}, params);
19
+ const invite = (invitedUser, context, { disableSendMail = true } = {}) => {
20
+ return requests.putRequestHandler(Endpoints.invite, invitedUser, context, {}, { disableSendMail });
22
21
  };
23
22
 
24
23
  const signupUser = (signupUserModel, context) => {
@@ -6,8 +6,8 @@ const userAPI = require('./users.api');
6
6
  const util = require('../utils/util');
7
7
  const httpResponseStatusCodes = require('../../../../common/httpResponseStatusCodes.json');
8
8
 
9
- const inviteUser = async (invitedUser, context) => {
10
- return userAPI.invite(invitedUser, context);
9
+ const inviteUser = async (invitedUser, context, { disableSendMail } = {}) => {
10
+ return userAPI.invite(invitedUser, context, { disableSendMail });
11
11
  };
12
12
 
13
13
  const signupUser = (signupUserModel, context) => {
@@ -0,0 +1,6 @@
1
+ const services = require('./requests.service');
2
+
3
+ const InviteRequestModel = require('./models/invite.request.model');
4
+ const models = { InviteRequestModel };
5
+
6
+ module.exports = { ... services, models };
@@ -1,4 +1,4 @@
1
- class InviteContractorModel {
1
+ class InviteRequestModel {
2
2
  constructor(
3
3
  email,
4
4
  company,
@@ -33,5 +33,5 @@ class InviteContractorModel {
33
33
  }
34
34
 
35
35
  module.exports = {
36
- InviteContractorModel
36
+ InviteRequestModel
37
37
  };
@@ -0,0 +1,20 @@
1
+ const requests = require('../../../common/requests/apiKeyAuth/requests');
2
+ const { openapiUrl } = require('../../../env').getEnv();
3
+ const { isLocalhost } = require('../../../env');
4
+
5
+ const contractorUrl = isLocalhost() ? 'contractors' : 'records';
6
+
7
+ const Endpoints = {
8
+ getAllRequests: `${openapiUrl}/${contractorUrl}/all`,
9
+ inviteRequest: tabId => `${openapiUrl}/tabs/${tabId}/${contractorUrl}`
10
+ };
11
+
12
+ const getAllRequests = async (apiKey, params) => {
13
+ return requests.getRequestHandler(Endpoints.getAllRequests, apiKey, params).then(res => res.data);
14
+ };
15
+
16
+ const inviteRequest = async (apiKey, tabId, params) => {
17
+ return requests.postRequestHandler(Endpoints.inviteRequest(tabId), apiKey, params).then(res => res.data);
18
+ };
19
+
20
+ module.exports = { getAllRequests, inviteRequest };
@@ -0,0 +1,18 @@
1
+ const requestsApi = require('./requests.api');
2
+ const { InviteRequestModel } = require('./models/invite.request.model');
3
+ const { validateType } = require('../../../common/validations/typeValidations');
4
+
5
+ const getAllAccountRequests = async (apiKey, { projectId, type, activationStatuses } = {}) => {
6
+ if (activationStatuses) {
7
+ activationStatuses = activationStatuses.reduce((f, s) => `${f},${s}`);
8
+ }
9
+
10
+ return requestsApi.getAllRequests(apiKey, { propertyId: projectId, type, activationStatuses });
11
+ };
12
+
13
+ const inviteRequest = async (apiKey, tabId, inviteRequestModel = {}) => {
14
+ validateType(inviteRequestModel, InviteRequestModel);
15
+ return requestsApi.inviteRequest(apiKey, tabId, inviteRequestModel);
16
+ };
17
+
18
+ module.exports = { getAllAccountRequests, inviteRequest };
@@ -1,8 +0,0 @@
1
- const { validateType } = require('../../../../common/validations/typeValidations');
2
- const { ContractorModel } = require('../../contractors/models/edit.contractor.model');
3
-
4
- function validateContractorModel(record) {
5
- validateType(record, ContractorModel);
6
- }
7
-
8
- module.exports = { validateContractorModel };
@@ -1,20 +0,0 @@
1
- const requests = require('../../../common/requests/apiKeyAuth/requests');
2
- const { openapiUrl } = require('../../../env').getEnv();
3
- const { isLocalhost } = require('../../../env');
4
-
5
- const contractorUrl = isLocalhost() ? 'contractors' : 'records';
6
-
7
- const Endpoints = {
8
- getAllContractors: `${openapiUrl}/${contractorUrl}/all`,
9
- inviteContractor: tabId => `${openapiUrl}/tabs/${tabId}/${contractorUrl}`
10
- };
11
-
12
- const getAllContractors = async (apiKey, params) => {
13
- return requests.getRequestHandler(Endpoints.getAllContractors, apiKey, params).then(res => res.data);
14
- };
15
-
16
- const inviteContractor = async (apiKey, tabId, params) => {
17
- return requests.postRequestHandler(Endpoints.inviteContractor(tabId), apiKey, params).then(res => res.data);
18
- };
19
-
20
- module.exports = { getAllContractors, inviteContractor };
@@ -1,18 +0,0 @@
1
- const contractorsApi = require('./contractors.api');
2
- const { InviteContractorModel } = require('./models/invite.contractor.model');
3
- const { validateType } = require('../../../common/validations/typeValidations');
4
-
5
- const getContractors = async (apiKey, { projectId, type, activationStatuses } = {}) => {
6
- if (activationStatuses) {
7
- activationStatuses = activationStatuses.reduce((f, s) => `${f},${s}`);
8
- }
9
-
10
- return contractorsApi.getAllContractors(apiKey, { propertyId: projectId, type, activationStatuses });
11
- };
12
-
13
- const inviteContractor = async (apiKey, tabId, inviteContractorModel = {}) => {
14
- validateType(inviteContractorModel, InviteContractorModel);
15
- return contractorsApi.inviteContractor(apiKey, tabId, inviteContractorModel);
16
- };
17
-
18
- module.exports = { getContractors, inviteContractor };
@@ -1,6 +0,0 @@
1
- const services = require('./contractors.service');
2
-
3
- const InviteContractorModel = require('./models/invite.contractor.model');
4
- const models = { InviteContractorModel };
5
-
6
- module.exports = { ... services, models };