sidekick-server-2 0.1.1
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.
- package/README.md +223 -0
- package/dist/ai/index.d.ts +2 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +2 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/perplexity-ai.d.ts +3 -0
- package/dist/ai/perplexity-ai.d.ts.map +1 -0
- package/dist/ai/perplexity-ai.js +28 -0
- package/dist/ai/perplexity-ai.js.map +1 -0
- package/dist/app-config.d.ts +13 -0
- package/dist/app-config.d.ts.map +1 -0
- package/dist/app-config.js +33 -0
- package/dist/app-config.js.map +1 -0
- package/dist/cors-config.d.ts +9 -0
- package/dist/cors-config.d.ts.map +1 -0
- package/dist/cors-config.js +24 -0
- package/dist/cors-config.js.map +1 -0
- package/dist/db-connection.d.ts +13 -0
- package/dist/db-connection.d.ts.map +1 -0
- package/dist/db-connection.js +22 -0
- package/dist/db-connection.js.map +1 -0
- package/dist/error-handler.d.ts +3 -0
- package/dist/error-handler.d.ts.map +1 -0
- package/dist/error-handler.js +15 -0
- package/dist/error-handler.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +87 -0
- package/dist/index.js.map +1 -0
- package/dist/local-cache.d.ts +14 -0
- package/dist/local-cache.d.ts.map +1 -0
- package/dist/local-cache.js +44 -0
- package/dist/local-cache.js.map +1 -0
- package/dist/r2-buckets/get-signed-url.d.ts +2 -0
- package/dist/r2-buckets/get-signed-url.d.ts.map +1 -0
- package/dist/r2-buckets/get-signed-url.js +22 -0
- package/dist/r2-buckets/get-signed-url.js.map +1 -0
- package/dist/r2-buckets/index.d.ts +3 -0
- package/dist/r2-buckets/index.d.ts.map +1 -0
- package/dist/r2-buckets/index.js +3 -0
- package/dist/r2-buckets/index.js.map +1 -0
- package/dist/r2-buckets/r2-client.d.ts +3 -0
- package/dist/r2-buckets/r2-client.d.ts.map +1 -0
- package/dist/r2-buckets/r2-client.js +18 -0
- package/dist/r2-buckets/r2-client.js.map +1 -0
- package/dist/r2-buckets/upload-r2.d.ts +11 -0
- package/dist/r2-buckets/upload-r2.d.ts.map +1 -0
- package/dist/r2-buckets/upload-r2.js +49 -0
- package/dist/r2-buckets/upload-r2.js.map +1 -0
- package/dist/routes/authentication/check-session.d.ts +4 -0
- package/dist/routes/authentication/check-session.d.ts.map +1 -0
- package/dist/routes/authentication/check-session.js +79 -0
- package/dist/routes/authentication/check-session.js.map +1 -0
- package/dist/routes/authentication/login-router.d.ts +3 -0
- package/dist/routes/authentication/login-router.d.ts.map +1 -0
- package/dist/routes/authentication/login-router.js +83 -0
- package/dist/routes/authentication/login-router.js.map +1 -0
- package/dist/routes/authentication/reset-password.d.ts +3 -0
- package/dist/routes/authentication/reset-password.d.ts.map +1 -0
- package/dist/routes/authentication/reset-password.js +92 -0
- package/dist/routes/authentication/reset-password.js.map +1 -0
- package/dist/routes/authentication/send-otp-router.d.ts +3 -0
- package/dist/routes/authentication/send-otp-router.d.ts.map +1 -0
- package/dist/routes/authentication/send-otp-router.js +89 -0
- package/dist/routes/authentication/send-otp-router.js.map +1 -0
- package/dist/routes/authentication/user-profile.d.ts +3 -0
- package/dist/routes/authentication/user-profile.d.ts.map +1 -0
- package/dist/routes/authentication/user-profile.js +44 -0
- package/dist/routes/authentication/user-profile.js.map +1 -0
- package/dist/routes/authentication/user-registration-router.d.ts +3 -0
- package/dist/routes/authentication/user-registration-router.d.ts.map +1 -0
- package/dist/routes/authentication/user-registration-router.js +120 -0
- package/dist/routes/authentication/user-registration-router.js.map +1 -0
- package/dist/routes/authentication/validator.d.ts +14 -0
- package/dist/routes/authentication/validator.d.ts.map +1 -0
- package/dist/routes/authentication/validator.js +69 -0
- package/dist/routes/authentication/validator.js.map +1 -0
- package/dist/routes/countries/countries-router.d.ts +3 -0
- package/dist/routes/countries/countries-router.d.ts.map +1 -0
- package/dist/routes/countries/countries-router.js +23 -0
- package/dist/routes/countries/countries-router.js.map +1 -0
- package/dist/routes/feature-flags/feature-flags.d.ts +5 -0
- package/dist/routes/feature-flags/feature-flags.d.ts.map +1 -0
- package/dist/routes/feature-flags/feature-flags.js +28 -0
- package/dist/routes/feature-flags/feature-flags.js.map +1 -0
- package/dist/routes/index.d.ts +9 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +92 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/link-metadata.d.ts +3 -0
- package/dist/routes/link-metadata.d.ts.map +1 -0
- package/dist/routes/link-metadata.js +34 -0
- package/dist/routes/link-metadata.js.map +1 -0
- package/dist/routes/orgs/index.d.ts +2 -0
- package/dist/routes/orgs/index.d.ts.map +1 -0
- package/dist/routes/orgs/index.js +2 -0
- package/dist/routes/orgs/index.js.map +1 -0
- package/dist/routes/orgs/invitation.d.ts +3 -0
- package/dist/routes/orgs/invitation.d.ts.map +1 -0
- package/dist/routes/orgs/invitation.js +103 -0
- package/dist/routes/orgs/invitation.js.map +1 -0
- package/dist/routes/orgs/org-delete.d.ts +3 -0
- package/dist/routes/orgs/org-delete.d.ts.map +1 -0
- package/dist/routes/orgs/org-delete.js +53 -0
- package/dist/routes/orgs/org-delete.js.map +1 -0
- package/dist/routes/orgs/org-get.d.ts +3 -0
- package/dist/routes/orgs/org-get.d.ts.map +1 -0
- package/dist/routes/orgs/org-get.js +45 -0
- package/dist/routes/orgs/org-get.js.map +1 -0
- package/dist/routes/orgs/org-members.d.ts +12 -0
- package/dist/routes/orgs/org-members.d.ts.map +1 -0
- package/dist/routes/orgs/org-members.js +560 -0
- package/dist/routes/orgs/org-members.js.map +1 -0
- package/dist/routes/orgs/org-post.d.ts +3 -0
- package/dist/routes/orgs/org-post.d.ts.map +1 -0
- package/dist/routes/orgs/org-post.js +89 -0
- package/dist/routes/orgs/org-post.js.map +1 -0
- package/dist/routes/orgs/org-put.d.ts +3 -0
- package/dist/routes/orgs/org-put.d.ts.map +1 -0
- package/dist/routes/orgs/org-put.js +87 -0
- package/dist/routes/orgs/org-put.js.map +1 -0
- package/dist/routes/orgs/org-registration-router.d.ts +3 -0
- package/dist/routes/orgs/org-registration-router.d.ts.map +1 -0
- package/dist/routes/orgs/org-registration-router.js +12 -0
- package/dist/routes/orgs/org-registration-router.js.map +1 -0
- package/dist/routes/orgs/org-utils.d.ts +14 -0
- package/dist/routes/orgs/org-utils.d.ts.map +1 -0
- package/dist/routes/orgs/org-utils.js +234 -0
- package/dist/routes/orgs/org-utils.js.map +1 -0
- package/dist/routes/orgs/premium-org-utils.d.ts +3 -0
- package/dist/routes/orgs/premium-org-utils.d.ts.map +1 -0
- package/dist/routes/orgs/premium-org-utils.js +61 -0
- package/dist/routes/orgs/premium-org-utils.js.map +1 -0
- package/dist/routes/paid-plans/billingsdk-config.d.ts +36 -0
- package/dist/routes/paid-plans/billingsdk-config.d.ts.map +1 -0
- package/dist/routes/paid-plans/billingsdk-config.js +2 -0
- package/dist/routes/paid-plans/billingsdk-config.js.map +1 -0
- package/dist/routes/paid-plans/get-subscription-config.d.ts +3 -0
- package/dist/routes/paid-plans/get-subscription-config.d.ts.map +1 -0
- package/dist/routes/paid-plans/get-subscription-config.js +25 -0
- package/dist/routes/paid-plans/get-subscription-config.js.map +1 -0
- package/dist/routes/paid-plans/payment-gateway.d.ts +3 -0
- package/dist/routes/paid-plans/payment-gateway.d.ts.map +1 -0
- package/dist/routes/paid-plans/payment-gateway.js +324 -0
- package/dist/routes/paid-plans/payment-gateway.js.map +1 -0
- package/dist/routes/paid-plans/purchased-plans.d.ts +8 -0
- package/dist/routes/paid-plans/purchased-plans.d.ts.map +1 -0
- package/dist/routes/paid-plans/purchased-plans.js +191 -0
- package/dist/routes/paid-plans/purchased-plans.js.map +1 -0
- package/dist/routes/paid-plans/subscription-utils.d.ts +25 -0
- package/dist/routes/paid-plans/subscription-utils.d.ts.map +1 -0
- package/dist/routes/paid-plans/subscription-utils.js +156 -0
- package/dist/routes/paid-plans/subscription-utils.js.map +1 -0
- package/dist/s3-buckets/get-signed-url.d.ts +2 -0
- package/dist/s3-buckets/get-signed-url.d.ts.map +1 -0
- package/dist/s3-buckets/get-signed-url.js +22 -0
- package/dist/s3-buckets/get-signed-url.js.map +1 -0
- package/dist/s3-buckets/index.d.ts +3 -0
- package/dist/s3-buckets/index.d.ts.map +1 -0
- package/dist/s3-buckets/index.js +3 -0
- package/dist/s3-buckets/index.js.map +1 -0
- package/dist/s3-buckets/s3-client.d.ts +3 -0
- package/dist/s3-buckets/s3-client.d.ts.map +1 -0
- package/dist/s3-buckets/s3-client.js +17 -0
- package/dist/s3-buckets/s3-client.js.map +1 -0
- package/dist/s3-buckets/upload-s3.d.ts +11 -0
- package/dist/s3-buckets/upload-s3.d.ts.map +1 -0
- package/dist/s3-buckets/upload-s3.js +51 -0
- package/dist/s3-buckets/upload-s3.js.map +1 -0
- package/dist/secret.d.ts +4 -0
- package/dist/secret.d.ts.map +1 -0
- package/dist/secret.js +11 -0
- package/dist/secret.js.map +1 -0
- package/dist/socket-config.d.ts +4 -0
- package/dist/socket-config.d.ts.map +1 -0
- package/dist/socket-config.js +23 -0
- package/dist/socket-config.js.map +1 -0
- package/dist/types.d.ts +141 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/common-utils.d.ts +61 -0
- package/dist/utils/common-utils.d.ts.map +1 -0
- package/dist/utils/common-utils.js +99 -0
- package/dist/utils/common-utils.js.map +1 -0
- package/dist/utils/email-helper.d.ts +6 -0
- package/dist/utils/email-helper.d.ts.map +1 -0
- package/dist/utils/email-helper.js +33 -0
- package/dist/utils/email-helper.js.map +1 -0
- package/dist/utils/enums.d.ts +17 -0
- package/dist/utils/enums.d.ts.map +1 -0
- package/dist/utils/enums.js +27 -0
- package/dist/utils/enums.js.map +1 -0
- package/dist/utils/error-logger.d.ts +4 -0
- package/dist/utils/error-logger.d.ts.map +1 -0
- package/dist/utils/error-logger.js +30 -0
- package/dist/utils/error-logger.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/otp-helper.d.ts +5 -0
- package/dist/utils/otp-helper.d.ts.map +1 -0
- package/dist/utils/otp-helper.js +89 -0
- package/dist/utils/otp-helper.js.map +1 -0
- package/dist/utils/response-utils.d.ts +8 -0
- package/dist/utils/response-utils.d.ts.map +1 -0
- package/dist/utils/response-utils.js +37 -0
- package/dist/utils/response-utils.js.map +1 -0
- package/dist/utils/sql-helper.d.ts +27 -0
- package/dist/utils/sql-helper.d.ts.map +1 -0
- package/dist/utils/sql-helper.js +97 -0
- package/dist/utils/sql-helper.js.map +1 -0
- package/dist/utils/type.d.ts +81 -0
- package/dist/utils/type.d.ts.map +1 -0
- package/dist/utils/type.js +2 -0
- package/dist/utils/type.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,560 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import { appInfo } from '../../app-config.js';
|
|
3
|
+
import { getRequestFromRoute, isEmailValid, isValidId } from '../../utils/common-utils.js';
|
|
4
|
+
import sendEmail from '../../utils/email-helper.js';
|
|
5
|
+
import { INVITATION_ENUMS, ROLES } from '../../utils/enums.js';
|
|
6
|
+
import logger from '../../utils/error-logger.js';
|
|
7
|
+
import { getErrorResponseObj, getResponseObj, sendErrorResponse, sendSuccessResponse, throwErrorInResponseIfErrorIsNotCustom, } from '../../utils/response-utils.js';
|
|
8
|
+
import { executeSql, initializeConnection, insertRecords, updateRecords } from '../../utils/sql-helper.js';
|
|
9
|
+
import { canWriteOrg, getInvitationEmailTpl, getOrgCreatedBy, invalidateOrgUserCacheForUser } from './org-utils.js';
|
|
10
|
+
import { checkCanAllowToIncludeUsersInOrg } from './premium-org-utils.js';
|
|
11
|
+
const getOrgMembersByOrgId = (orgId, connection) => {
|
|
12
|
+
const sql = `SELECT
|
|
13
|
+
u.user_id,
|
|
14
|
+
ou.org_id,
|
|
15
|
+
(ou.org_user_is_active AND u.user_is_active) AS is_active,
|
|
16
|
+
ou.org_user_role_id as role_id,
|
|
17
|
+
ou.user_opinion,
|
|
18
|
+
u.user_email,
|
|
19
|
+
u.user_fname,
|
|
20
|
+
u.user_lname,
|
|
21
|
+
ou.created_at as joined_on
|
|
22
|
+
FROM auth_organization_users_tbl ou
|
|
23
|
+
INNER JOIN auth_users_tbl u ON ou.user_id = u.user_id
|
|
24
|
+
INNER JOIN auth_organization_tbl o ON ou.org_id = o.org_id
|
|
25
|
+
WHERE o.org_id = ${orgId} AND o.org_is_deleted = 0;`;
|
|
26
|
+
return executeSql(sql, connection);
|
|
27
|
+
};
|
|
28
|
+
const checkWriteAccess = async (orgId, userId, connection) => {
|
|
29
|
+
// permission checks
|
|
30
|
+
if ((await canWriteOrg(userId, orgId, connection)) === false) {
|
|
31
|
+
throw getErrorResponseObj({
|
|
32
|
+
errorMsg: "You don't have permission to access it.",
|
|
33
|
+
solution: `Contact your ${appInfo.account_type_txt.singular} administrator.`,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const updateOrgMembersInOrg = async (requestObj, getReqData, formatResponse, connection, isTransactionGoingOn = false) => {
|
|
38
|
+
const { users, orgId, loggedInUserId } = requestObj;
|
|
39
|
+
if (!Array.isArray(users) || !isValidId(orgId) || users.length <= 0) {
|
|
40
|
+
throw getErrorResponseObj({
|
|
41
|
+
errorMsg: `Invalid user IDs or ${appInfo.account_type_txt.singular} ID.`,
|
|
42
|
+
solution: `Please provide a valid list of user IDs and ${appInfo.account_type_txt.singular} ID.`,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
if (!isValidId(loggedInUserId)) {
|
|
46
|
+
throw getErrorResponseObj({
|
|
47
|
+
errorMsg: 'Invalid logged in user.',
|
|
48
|
+
solution: 'Please login again and try again.',
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
// Begin the transaction
|
|
53
|
+
if (isTransactionGoingOn === false) {
|
|
54
|
+
await connection.beginTransaction();
|
|
55
|
+
}
|
|
56
|
+
// permission checks
|
|
57
|
+
await checkWriteAccess(orgId, loggedInUserId, connection);
|
|
58
|
+
const result = [];
|
|
59
|
+
let someFailed = false;
|
|
60
|
+
for (const user of users) {
|
|
61
|
+
const whereClause = {
|
|
62
|
+
user_id: user.user_id,
|
|
63
|
+
org_id: orgId,
|
|
64
|
+
};
|
|
65
|
+
const needToSETData = getReqData(user);
|
|
66
|
+
try {
|
|
67
|
+
if (needToSETData === false) {
|
|
68
|
+
//Todo: This error message should come from deleteUsersInOrg function only.
|
|
69
|
+
throw {
|
|
70
|
+
errorMsg: `Cannot update the team member details as you are the creator of this ${appInfo.account_type_txt.singular.toLocaleLowerCase()}.`,
|
|
71
|
+
solution: `If you want to delete this ${appInfo.account_type_txt.singular.toLocaleLowerCase()}, please use the delete option instead.`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const responseObj = await updateRecords('auth_organization_users_tbl', needToSETData, whereClause, connection);
|
|
75
|
+
const success = responseObj.affectedRows > 0;
|
|
76
|
+
await invalidateOrgUserCacheForUser(whereClause.org_id, whereClause.user_id);
|
|
77
|
+
result.push({
|
|
78
|
+
success,
|
|
79
|
+
changedFor: whereClause,
|
|
80
|
+
updatedData: success ? formatResponse(needToSETData) : {},
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
someFailed = true;
|
|
85
|
+
result.push({
|
|
86
|
+
success: false,
|
|
87
|
+
changedFor: whereClause,
|
|
88
|
+
error,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Commit the transaction if everything is successful
|
|
93
|
+
if (isTransactionGoingOn === false) {
|
|
94
|
+
await connection.commit();
|
|
95
|
+
}
|
|
96
|
+
return getResponseObj({
|
|
97
|
+
message: someFailed ? "Some team member's data haven't updated due to some issues." : "Team member's data has been updated successfully.",
|
|
98
|
+
result,
|
|
99
|
+
someFailed,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
// Rollback the transaction in case of any error
|
|
104
|
+
if (isTransactionGoingOn === false) {
|
|
105
|
+
await connection.rollback();
|
|
106
|
+
}
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
const getOrgMembers = async (request, response) => {
|
|
111
|
+
const { user, params } = request;
|
|
112
|
+
const { orgId: orgIdStr } = params;
|
|
113
|
+
const { id: loggedInUserId } = user;
|
|
114
|
+
const orgId = Number(orgIdStr);
|
|
115
|
+
await initializeConnection(async (connection) => {
|
|
116
|
+
try {
|
|
117
|
+
// here we are checking the permissions, because this API will get fired on org edit page, and
|
|
118
|
+
// if user don't have permission to edit the org, then we are not even showing the org members.
|
|
119
|
+
await checkWriteAccess(orgId, loggedInUserId, connection);
|
|
120
|
+
const orgMembers = await getOrgMembersByOrgId(orgId, connection);
|
|
121
|
+
// check if allowed or not..
|
|
122
|
+
const loggedInUserExists = orgMembers.some((rec) => rec.user_id === loggedInUserId);
|
|
123
|
+
if (loggedInUserExists === false) {
|
|
124
|
+
sendErrorResponse(response, getErrorResponseObj({
|
|
125
|
+
errorMsg: 'You do not have any permissions to access it.',
|
|
126
|
+
solution: 'Access Denied! Contact your Org administrator.',
|
|
127
|
+
}));
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const sqlUnregisteredUsers = `SELECT invited_users_id, email, invited_user_role_id as role_id, invited_by_user_id, updated_at FROM auth_invited_users_tbl
|
|
131
|
+
WHERE is_deleted = 0 AND org_id = ${orgId}`;
|
|
132
|
+
const unregisteredUsers = await executeSql(sqlUnregisteredUsers, connection);
|
|
133
|
+
sendSuccessResponse(response, getResponseObj({ orgMembers, unregisteredUsers }));
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
throwErrorInResponseIfErrorIsNotCustom(response, error, {
|
|
137
|
+
errorMsg: 'Encountered an error while fetching Team Member.',
|
|
138
|
+
solution: 'Error occurred while communicating with database.',
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
//This method will add users as a team member without an invite
|
|
144
|
+
export const includeUsersInOrg = async (requestObj, loggedInUserId, connection, addPermissionCheck = true, isTransactionGoingOn = false) => {
|
|
145
|
+
const fields = ['included_users', 'org_id'];
|
|
146
|
+
const reqBody = getRequestFromRoute(requestObj, fields);
|
|
147
|
+
const { included_users: users, org_id: orgId } = reqBody;
|
|
148
|
+
try {
|
|
149
|
+
if (!Array.isArray(users) || !isValidId(orgId)) {
|
|
150
|
+
throw getErrorResponseObj({
|
|
151
|
+
errorMsg: `Invalid user IDs or ${appInfo.account_type_txt.singular} ID.`,
|
|
152
|
+
solution: `Please provide a valid list of user IDs and ${appInfo.account_type_txt.singular} ID.`,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
if (!isValidId(loggedInUserId)) {
|
|
156
|
+
throw getErrorResponseObj({
|
|
157
|
+
errorMsg: 'Invalid logged in user.',
|
|
158
|
+
solution: 'Please login again and try again.',
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
// permission checks
|
|
162
|
+
if (addPermissionCheck)
|
|
163
|
+
await checkWriteAccess(orgId, loggedInUserId, connection);
|
|
164
|
+
const records = users.map(({ user_id, role_id, user_opinion }) => {
|
|
165
|
+
return {
|
|
166
|
+
org_id: orgId,
|
|
167
|
+
user_id,
|
|
168
|
+
org_user_role_id: role_id,
|
|
169
|
+
// TODO: Why we are checking an user opinion for logged in user here?
|
|
170
|
+
user_opinion: user_opinion >= 0 ? user_opinion : user_id === loggedInUserId ? INVITATION_ENUMS.ACCEPTED : INVITATION_ENUMS.INVITED,
|
|
171
|
+
};
|
|
172
|
+
});
|
|
173
|
+
const sql = `SELECT org_user_is_active as is_active, org_user_role_id, user_id FROM auth_organization_users_tbl
|
|
174
|
+
WHERE org_id = ${orgId} AND user_id IN (${users.map((rec) => rec.user_id)});`;
|
|
175
|
+
const earlierOrgMembersRaw = await executeSql(sql, connection);
|
|
176
|
+
const earlierOrgMemberIds = earlierOrgMembersRaw.map((rec) => rec.user_id);
|
|
177
|
+
let updatedRecords;
|
|
178
|
+
if (earlierOrgMemberIds && earlierOrgMemberIds.length > 0) {
|
|
179
|
+
const needToUpdateRecords = records.filter((rec) => earlierOrgMemberIds.includes(rec.user_id));
|
|
180
|
+
const requestObj = {
|
|
181
|
+
users: needToUpdateRecords,
|
|
182
|
+
orgId: orgId,
|
|
183
|
+
loggedInUserId,
|
|
184
|
+
};
|
|
185
|
+
const getReqData = (user) => ({
|
|
186
|
+
org_user_is_active: true,
|
|
187
|
+
org_user_role_id: ROLES.IS_VALID_ROLE_ID(user.org_user_role_id) ? user.org_user_role_id : ROLES.READ,
|
|
188
|
+
});
|
|
189
|
+
const formatResponse = (req) => ({
|
|
190
|
+
role_id: 'org_user_role_id' in req ? req.org_user_role_id : ROLES.READ,
|
|
191
|
+
});
|
|
192
|
+
const updatedRecordsRes = await updateOrgMembersInOrg(requestObj, getReqData, formatResponse, connection, isTransactionGoingOn);
|
|
193
|
+
if (updatedRecordsRes.success) {
|
|
194
|
+
const { result: records } = updatedRecordsRes.response;
|
|
195
|
+
updatedRecords = records.map((rec) => {
|
|
196
|
+
return { ...rec.changedFor, ...rec.updatedData };
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const needToInsertRecords = records.filter((rec) => !earlierOrgMemberIds.includes(rec.user_id));
|
|
201
|
+
let insertedRecords;
|
|
202
|
+
if (needToInsertRecords && needToInsertRecords.length > 0) {
|
|
203
|
+
insertedRecords = await insertRecords('auth_organization_users_tbl', needToInsertRecords, connection);
|
|
204
|
+
insertedRecords = needToInsertRecords;
|
|
205
|
+
for (const rec of needToInsertRecords) {
|
|
206
|
+
await invalidateOrgUserCacheForUser(rec.org_id, rec.user_id);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return { insertedRecords, updatedRecords };
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
// Handle duplicate entry error (MySQL error code: 1062)
|
|
213
|
+
if (error && error.code === 'ER_DUP_ENTRY') {
|
|
214
|
+
throw getErrorResponseObj({
|
|
215
|
+
errorMsg: 'Some of users are might already exists.',
|
|
216
|
+
solution: 'Please use add users which are not in this org or contact support.',
|
|
217
|
+
}, error);
|
|
218
|
+
}
|
|
219
|
+
throw throwErrorInResponseIfErrorIsNotCustom(null, error, {
|
|
220
|
+
errorMsg: `An error occurred while ${appInfo.account_type_txt.singular} add team members.`,
|
|
221
|
+
solution: 'Please try again later or contact support if the issue persists.',
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
const editUsersInOrg = async (request, response) => {
|
|
226
|
+
/**
|
|
227
|
+
* Request JSON: {
|
|
228
|
+
* users: [{
|
|
229
|
+
* user_id: number;
|
|
230
|
+
* role_id: number;
|
|
231
|
+
* }],
|
|
232
|
+
* org_id: number;
|
|
233
|
+
* }
|
|
234
|
+
*/
|
|
235
|
+
const getReqData = (user) => ({
|
|
236
|
+
org_user_is_active: true,
|
|
237
|
+
org_user_role_id: ROLES.IS_VALID_ROLE_ID(user?.role_id) ? user?.role_id : ROLES.READ,
|
|
238
|
+
});
|
|
239
|
+
const formatResponse = (req) => ({
|
|
240
|
+
role_id: 'org_user_role_id' in req ? req.org_user_role_id : ROLES.READ,
|
|
241
|
+
});
|
|
242
|
+
const requestObj = {
|
|
243
|
+
users: request.body.users,
|
|
244
|
+
orgId: request.body.org_id,
|
|
245
|
+
loggedInUserId: request.user?.id,
|
|
246
|
+
};
|
|
247
|
+
await initializeConnection(async (connection) => {
|
|
248
|
+
try {
|
|
249
|
+
const result = await updateOrgMembersInOrg(requestObj, getReqData, formatResponse, connection, false);
|
|
250
|
+
sendSuccessResponse(response, result);
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
throwErrorInResponseIfErrorIsNotCustom(response, error, {
|
|
254
|
+
errorMsg: `An error occurred while updating an ${appInfo.account_type_txt.singular.toLocaleLowerCase()}'s team members.`,
|
|
255
|
+
solution: 'Please try again later or contact support if the issue persists.',
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
};
|
|
260
|
+
const deleteUsersInOrg = async (request, response) => {
|
|
261
|
+
/**
|
|
262
|
+
* Request JSON: {
|
|
263
|
+
* users: [{
|
|
264
|
+
* user_id: number;
|
|
265
|
+
* }],
|
|
266
|
+
* org_id: number;
|
|
267
|
+
* }
|
|
268
|
+
*/
|
|
269
|
+
await initializeConnection(async (connection) => {
|
|
270
|
+
try {
|
|
271
|
+
const requestObj = {
|
|
272
|
+
users: request.body.users,
|
|
273
|
+
orgId: request.body.org_id,
|
|
274
|
+
loggedInUserId: parseInt(request.user?.id, 10),
|
|
275
|
+
};
|
|
276
|
+
const orgCreatedBy = await getOrgCreatedBy(requestObj.orgId, connection);
|
|
277
|
+
const getReqData = (user) => {
|
|
278
|
+
if (user?.user_id === orgCreatedBy) {
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
return {
|
|
282
|
+
org_user_is_active: false,
|
|
283
|
+
user_opinion: INVITATION_ENUMS.INVITED,
|
|
284
|
+
};
|
|
285
|
+
};
|
|
286
|
+
const formatResponse = () => ({
|
|
287
|
+
role_id: ROLES.READ,
|
|
288
|
+
deleted: true,
|
|
289
|
+
});
|
|
290
|
+
const result = await updateOrgMembersInOrg(requestObj, getReqData, formatResponse, connection, false);
|
|
291
|
+
sendSuccessResponse(response, result);
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
throwErrorInResponseIfErrorIsNotCustom(response, error, {
|
|
295
|
+
errorMsg: `An error occurred while deleting an ${appInfo.account_type_txt.singular.toLocaleLowerCase()}'s team members.`,
|
|
296
|
+
solution: 'Please try again later or contact support if the issue persists.',
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
};
|
|
301
|
+
const addUsersInOrg = async (request, response) => {
|
|
302
|
+
/**
|
|
303
|
+
* Request JSON: {
|
|
304
|
+
* included_users: [{
|
|
305
|
+
* user_id: number;
|
|
306
|
+
* role_id: number;
|
|
307
|
+
* }],
|
|
308
|
+
* org_id: number;
|
|
309
|
+
* }
|
|
310
|
+
*/
|
|
311
|
+
const reqBody = request.body || {};
|
|
312
|
+
await initializeConnection(async (connection) => {
|
|
313
|
+
try {
|
|
314
|
+
await connection.beginTransaction();
|
|
315
|
+
const result = await includeUsersInOrg(reqBody, request.user?.id, connection, true, true);
|
|
316
|
+
await checkCanAllowToIncludeUsersInOrg(reqBody.org_id, connection);
|
|
317
|
+
await connection.commit();
|
|
318
|
+
sendSuccessResponse(response, getResponseObj(result));
|
|
319
|
+
}
|
|
320
|
+
catch (error) {
|
|
321
|
+
await connection.rollback();
|
|
322
|
+
throwErrorInResponseIfErrorIsNotCustom(response, error, {
|
|
323
|
+
errorMsg: `An error occurred while adding new team member in ${appInfo.account_type_txt.singular}.`,
|
|
324
|
+
solution: 'Please try again later or contact support if the issue persists.',
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
};
|
|
329
|
+
const addUsersInInvitedUsersTbl = async (unregisteredUsers, orgId, invitedByUserId, connection) => {
|
|
330
|
+
//this method will add the users in invite_users table, by running one by one INSERT query.
|
|
331
|
+
//and relying on error from DB about duplicate error.
|
|
332
|
+
//If any error with any query, still we are proceeding with INSERT of other users.
|
|
333
|
+
/**
|
|
334
|
+
* unregisteredUsers: {[{
|
|
335
|
+
* email: string;
|
|
336
|
+
* org_user_role_id: number;
|
|
337
|
+
* }]}
|
|
338
|
+
*
|
|
339
|
+
* Return format: { passedRecs: [ { org_id, email and all } ],
|
|
340
|
+
* failedRecs: [ { record: { org_id, email and all }, error } ] }
|
|
341
|
+
*/
|
|
342
|
+
const passedRecs = [], failedRecs = [];
|
|
343
|
+
for (const element of unregisteredUsers) {
|
|
344
|
+
const insertRec = {
|
|
345
|
+
org_id: orgId,
|
|
346
|
+
email: element.email,
|
|
347
|
+
invited_user_role_id: element.role_id,
|
|
348
|
+
invited_by_user_id: invitedByUserId,
|
|
349
|
+
};
|
|
350
|
+
try {
|
|
351
|
+
const result = await insertRecords('auth_invited_users_tbl', [insertRec], connection);
|
|
352
|
+
if (result.affectedRows === 1)
|
|
353
|
+
passedRecs.push(insertRec);
|
|
354
|
+
else
|
|
355
|
+
failedRecs.push({
|
|
356
|
+
record: insertRec,
|
|
357
|
+
error: result,
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
let cError = error;
|
|
362
|
+
if (error && error.code === 'ER_DUP_ENTRY') {
|
|
363
|
+
cError = {
|
|
364
|
+
errorMsg: `Invitation has been already sent to this (${insertRec.email}) user earlier.`,
|
|
365
|
+
solution: `This user is already in your ${appInfo.account_type_txt.singular}.`,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
failedRecs.push({
|
|
369
|
+
record: insertRec,
|
|
370
|
+
error: cError,
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
return { passedRecs, failedRecs };
|
|
375
|
+
};
|
|
376
|
+
const sendInvitationEmail = async (emails, invitationFrom_userId, invitationTo_orgId) => {
|
|
377
|
+
if (!emails || emails.length <= 0 || !isValidId(invitationFrom_userId) || !isValidId(invitationTo_orgId))
|
|
378
|
+
return;
|
|
379
|
+
await initializeConnection(async (connection) => {
|
|
380
|
+
try {
|
|
381
|
+
const orgSql = `SELECT org_name from auth_organization_tbl WHERE org_id=${invitationTo_orgId}`;
|
|
382
|
+
const orgsResult = await executeSql(orgSql, connection);
|
|
383
|
+
const organizationName = orgsResult[0]?.org_name || '';
|
|
384
|
+
if (!organizationName) {
|
|
385
|
+
throw `${appInfo.account_type_txt.singular} not found, error from method sendInvitationEmail`;
|
|
386
|
+
}
|
|
387
|
+
const usersSql = `SELECT user_email, user_fname as fname, user_lname as lname, user_id FROM auth_users_tbl WHERE user_email IN (${emails.map((em) => `"${em}"`).join(', ')}) OR user_id=${invitationFrom_userId} AND user_is_active = 1`;
|
|
388
|
+
const usersResult = await executeSql(usersSql, connection);
|
|
389
|
+
const emailUserMap = {};
|
|
390
|
+
let inviterName = '';
|
|
391
|
+
usersResult.forEach((user) => {
|
|
392
|
+
emailUserMap[user.user_email] = user;
|
|
393
|
+
if (user.user_id === invitationFrom_userId) {
|
|
394
|
+
inviterName = `${user.fname} ${user.lname} (${user.user_email})`;
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
for (const email of emails) {
|
|
398
|
+
const userObj = emailUserMap[email];
|
|
399
|
+
const userName = userObj ? `${userObj.fname} ${userObj.lname}` : email;
|
|
400
|
+
const isUserHaveAnAccount = !!userObj;
|
|
401
|
+
const emailTemplate = getInvitationEmailTpl({ invitedTo_UserName: userName, organizationName, inviterName, isUserHaveAnAccount });
|
|
402
|
+
try {
|
|
403
|
+
await sendEmail({
|
|
404
|
+
email,
|
|
405
|
+
subject: `${appInfo.appName} - Invitation to Join ${organizationName}`,
|
|
406
|
+
html: emailTemplate,
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
catch (error) {
|
|
410
|
+
logger.error('Error while actual sending an invitation email from sendInvitationEmail.', error);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
catch (error) {
|
|
415
|
+
logger.error('Error while calculating an invitation emails from sendInvitationEmail.', error);
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
};
|
|
419
|
+
const addUsersByEmail = async (request, response) => {
|
|
420
|
+
/**
|
|
421
|
+
* Request JSON: {
|
|
422
|
+
* included_users: [{
|
|
423
|
+
* email: string;
|
|
424
|
+
* role_id: number;
|
|
425
|
+
* }],
|
|
426
|
+
* org_id: number;
|
|
427
|
+
* }
|
|
428
|
+
*/
|
|
429
|
+
const reqBody = request.body || {};
|
|
430
|
+
const needToIncludeUsers = reqBody.included_users;
|
|
431
|
+
await initializeConnection(async (connection) => {
|
|
432
|
+
try {
|
|
433
|
+
const emails = [];
|
|
434
|
+
for (const user of needToIncludeUsers) {
|
|
435
|
+
if (!isEmailValid(user.email))
|
|
436
|
+
continue;
|
|
437
|
+
emails.push(user.email);
|
|
438
|
+
}
|
|
439
|
+
await connection.beginTransaction();
|
|
440
|
+
await checkWriteAccess(reqBody.org_id, request.user?.id, connection);
|
|
441
|
+
const sql = `SELECT user_email, user_id FROM auth_users_tbl WHERE user_email IN (${emails.map((em) => `"${em}"`).join(', ')}) AND user_is_active = 1;`;
|
|
442
|
+
const resultEmailUserIds = (await executeSql(sql, connection));
|
|
443
|
+
const emailUserIdMap = {};
|
|
444
|
+
resultEmailUserIds.forEach((element) => {
|
|
445
|
+
emailUserIdMap[element.user_email] = element.user_id;
|
|
446
|
+
});
|
|
447
|
+
const unRegisteredUsers = [];
|
|
448
|
+
const registeredUsers = [];
|
|
449
|
+
for (const user of needToIncludeUsers) {
|
|
450
|
+
if (user.email in emailUserIdMap) {
|
|
451
|
+
registeredUsers.push({
|
|
452
|
+
role_id: user.role_id,
|
|
453
|
+
user_id: emailUserIdMap[user.email],
|
|
454
|
+
});
|
|
455
|
+
continue;
|
|
456
|
+
}
|
|
457
|
+
unRegisteredUsers.push({
|
|
458
|
+
role_id: user.role_id,
|
|
459
|
+
email: user.email,
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
let registeredUsersResult, invitedUnregisteredUsersResult;
|
|
463
|
+
if (registeredUsers.length > 0) {
|
|
464
|
+
const addTeamMembers = {
|
|
465
|
+
org_id: reqBody.org_id,
|
|
466
|
+
included_users: registeredUsers,
|
|
467
|
+
};
|
|
468
|
+
registeredUsersResult = await includeUsersInOrg(addTeamMembers, request.user?.id, connection, true, true);
|
|
469
|
+
//here means, we've successfully added orgMembers in this org.
|
|
470
|
+
}
|
|
471
|
+
if (unRegisteredUsers.length > 0) {
|
|
472
|
+
//now adding unregistered users in auth_invited_users_tbl tbl.
|
|
473
|
+
invitedUnregisteredUsersResult = await addUsersInInvitedUsersTbl(unRegisteredUsers, reqBody.org_id, request.user?.id, connection);
|
|
474
|
+
}
|
|
475
|
+
await checkCanAllowToIncludeUsersInOrg(reqBody.org_id, connection);
|
|
476
|
+
await connection.commit();
|
|
477
|
+
sendSuccessResponse(response, getResponseObj({
|
|
478
|
+
registeredUsers: registeredUsersResult,
|
|
479
|
+
unregisteredUsers: invitedUnregisteredUsersResult,
|
|
480
|
+
}));
|
|
481
|
+
setImmediate(() => {
|
|
482
|
+
sendInvitationEmail(emails, request.user?.id, reqBody.org_id);
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
catch (error) {
|
|
486
|
+
await connection.rollback();
|
|
487
|
+
throwErrorInResponseIfErrorIsNotCustom(response, error, {
|
|
488
|
+
errorMsg: `An error occurred while adding new team member in ${appInfo.account_type_txt.singular.toLocaleLowerCase()}.`,
|
|
489
|
+
solution: 'Please try again later or contact support if the issue persists.',
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
});
|
|
493
|
+
};
|
|
494
|
+
const deleteUnregisteredUserInvitation = async (request, response) => {
|
|
495
|
+
/**
|
|
496
|
+
* You can use this API to ACCEPT, REJECT or LEFT any org.
|
|
497
|
+
* Req JSON: {
|
|
498
|
+
* org_id: number,
|
|
499
|
+
* invited_users_id: number
|
|
500
|
+
* }
|
|
501
|
+
*/
|
|
502
|
+
const loggedInUserId = parseInt(request.user?.id, 10);
|
|
503
|
+
const { org_id: orgId, invited_users_id } = request.body;
|
|
504
|
+
const updateDB = async (isDelete, connection) => {
|
|
505
|
+
try {
|
|
506
|
+
const updateData = {
|
|
507
|
+
is_deleted: isDelete,
|
|
508
|
+
};
|
|
509
|
+
const whereClause = {
|
|
510
|
+
org_id: orgId,
|
|
511
|
+
invited_users_id,
|
|
512
|
+
};
|
|
513
|
+
const responseObj = await updateRecords('auth_invited_users_tbl', updateData, whereClause, connection);
|
|
514
|
+
const success = responseObj.affectedRows > 0;
|
|
515
|
+
if (success) {
|
|
516
|
+
sendSuccessResponse(response, getResponseObj({ ...updateData, ...whereClause }));
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
throw getErrorResponseObj({
|
|
520
|
+
errorMsg: `Error occurred while deleting an unregistered user's invitation.`,
|
|
521
|
+
solution: 'Please try again later or contact support if the issue persists.',
|
|
522
|
+
});
|
|
523
|
+
}
|
|
524
|
+
catch (error) {
|
|
525
|
+
if (error && error.code === 'ER_DUP_ENTRY' && isDelete < 5) {
|
|
526
|
+
await updateDB(isDelete + 1, connection);
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
throw error;
|
|
530
|
+
}
|
|
531
|
+
};
|
|
532
|
+
await initializeConnection(async (connection) => {
|
|
533
|
+
try {
|
|
534
|
+
if (!isValidId(orgId) || !isValidId(invited_users_id)) {
|
|
535
|
+
throw getErrorResponseObj({
|
|
536
|
+
errorMsg: `Unable to delete this user for an invalid organization-id or user-id.`,
|
|
537
|
+
solution: "Error occurred while deleting an unregistered user's invitation.",
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
// permission checks
|
|
541
|
+
await checkWriteAccess(orgId, loggedInUserId, connection);
|
|
542
|
+
await updateDB(1, connection);
|
|
543
|
+
}
|
|
544
|
+
catch (error) {
|
|
545
|
+
throwErrorInResponseIfErrorIsNotCustom(response, error, {
|
|
546
|
+
errorMsg: "Error encountered while deleting an unregistered user's invitation.",
|
|
547
|
+
solution: '',
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
});
|
|
551
|
+
};
|
|
552
|
+
const orgMembersRouter = express.Router();
|
|
553
|
+
orgMembersRouter.post('/by-emails', addUsersByEmail);
|
|
554
|
+
orgMembersRouter.get('/:orgId', getOrgMembers);
|
|
555
|
+
orgMembersRouter.put('/', editUsersInOrg);
|
|
556
|
+
orgMembersRouter.delete('/', deleteUsersInOrg);
|
|
557
|
+
orgMembersRouter.post('/', addUsersInOrg);
|
|
558
|
+
orgMembersRouter.delete('/unregistered-user-invitation', deleteUnregisteredUserInvitation);
|
|
559
|
+
export default orgMembersRouter;
|
|
560
|
+
//# sourceMappingURL=org-members.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-members.js","sourceRoot":"","sources":["../../../src/routes/orgs/org-members.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-post.d.ts","sourceRoot":"","sources":["../../../src/routes/orgs/org-post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAiD5C,eAAO,MAAM,QAAQ,GAAU,SAAS,OAAO,EAAE,UAAU,QAAQ,kBAiElE,CAAC"}
|