@app-connect/core 0.0.3 → 1.6.4
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/.env.test +5 -5
- package/README.md +434 -425
- package/adapter/mock.js +76 -76
- package/adapter/registry.js +247 -247
- package/handlers/admin.js +62 -60
- package/handlers/auth.js +205 -156
- package/handlers/contact.js +274 -274
- package/handlers/disposition.js +193 -193
- package/handlers/log.js +612 -586
- package/handlers/user.js +101 -101
- package/index.js +1302 -1202
- package/jest.config.js +56 -56
- package/lib/analytics.js +52 -52
- package/lib/callLogComposer.js +550 -451
- package/lib/constants.js +9 -0
- package/lib/encode.js +30 -30
- package/lib/generalErrorMessage.js +41 -41
- package/lib/jwt.js +16 -16
- package/lib/oauth.js +79 -29
- package/lib/util.js +43 -40
- package/models/adminConfigModel.js +17 -17
- package/models/cacheModel.js +23 -23
- package/models/callLogModel.js +27 -27
- package/models/dynamo/lockSchema.js +24 -24
- package/models/dynamo/noteCacheSchema.js +30 -0
- package/models/messageLogModel.js +25 -25
- package/models/sequelize.js +16 -16
- package/models/userModel.js +38 -38
- package/package.json +67 -64
- package/releaseNotes.json +701 -577
- package/test/adapter/registry.test.js +270 -270
- package/test/handlers/auth.test.js +230 -230
- package/test/lib/jwt.test.js +161 -161
- package/test/setup.js +176 -176
package/handlers/user.js
CHANGED
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
const axios = require('axios');
|
|
2
|
-
const { AdminConfigModel } = require('../models/adminConfigModel');
|
|
3
|
-
const { getHashValue } = require('../lib/util');
|
|
4
|
-
const adapterRegistry = require('../adapter/registry');
|
|
5
|
-
|
|
6
|
-
async function getUserSettingsByAdmin({ rcAccessToken, rcAccountId }) {
|
|
7
|
-
let hashedRcAccountId = null;
|
|
8
|
-
if (rcAccountId) {
|
|
9
|
-
hashedRcAccountId = rcAccountId;
|
|
10
|
-
}
|
|
11
|
-
else {
|
|
12
|
-
const rcExtensionResponse = await axios.get(
|
|
13
|
-
'https://platform.ringcentral.com/restapi/v1.0/account/~/extension/~',
|
|
14
|
-
{
|
|
15
|
-
headers: {
|
|
16
|
-
Authorization: `Bearer ${rcAccessToken}`,
|
|
17
|
-
},
|
|
18
|
-
});
|
|
19
|
-
hashedRcAccountId = getHashValue(rcExtensionResponse.data.account.id, process.env.HASH_KEY);
|
|
20
|
-
}
|
|
21
|
-
const adminConfig = await AdminConfigModel.findByPk(hashedRcAccountId);
|
|
22
|
-
return {
|
|
23
|
-
customManifestUrl: adminConfig?.customAdapter,
|
|
24
|
-
userSettings: adminConfig?.userSettings
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
async function getUserSettings({ user, rcAccessToken, rcAccountId }) {
|
|
29
|
-
let userSettingsByAdmin = [];
|
|
30
|
-
if (rcAccessToken || rcAccountId) {
|
|
31
|
-
try {
|
|
32
|
-
userSettingsByAdmin = await getUserSettingsByAdmin({ rcAccessToken, rcAccountId });
|
|
33
|
-
}
|
|
34
|
-
catch (e) {
|
|
35
|
-
userSettingsByAdmin = [];
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// For non-readonly admin settings, user use its own setting
|
|
40
|
-
let userSettings = await user?.userSettings;
|
|
41
|
-
let result = {};
|
|
42
|
-
if (!userSettingsByAdmin?.userSettings) {
|
|
43
|
-
result = userSettings;
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
if (!!userSettingsByAdmin?.userSettings && !!userSettings) {
|
|
47
|
-
const keys = Object.keys(userSettingsByAdmin.userSettings).concat(Object.keys(userSettings));
|
|
48
|
-
// distinct keys
|
|
49
|
-
for (const key of new Set(keys)) {
|
|
50
|
-
// from user's own settings
|
|
51
|
-
if ((userSettingsByAdmin.userSettings[key] === undefined || userSettingsByAdmin.userSettings[key].customizable) && userSettings[key] !== undefined) {
|
|
52
|
-
result[key] = {
|
|
53
|
-
customizable: true,
|
|
54
|
-
value: userSettings[key].value,
|
|
55
|
-
defaultValue: userSettings[key].defaultValue,
|
|
56
|
-
options: userSettings[key].options
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
// from admin settings
|
|
60
|
-
else {
|
|
61
|
-
result[key] = userSettingsByAdmin.userSettings[key];
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return result;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
async function updateUserSettings({ user, userSettings, platformName }) {
|
|
70
|
-
const keys = Object.keys(userSettings || {});
|
|
71
|
-
let updatedSettings = {
|
|
72
|
-
...(user.userSettings || {})
|
|
73
|
-
};
|
|
74
|
-
for (const k of keys) {
|
|
75
|
-
updatedSettings[k] = userSettings[k];
|
|
76
|
-
}
|
|
77
|
-
const platformModule = adapterRegistry.getAdapter(platformName);
|
|
78
|
-
if (platformModule.onUpdateUserSettings) {
|
|
79
|
-
const { successful, returnMessage } = await platformModule.onUpdateUserSettings({ user, userSettings, updatedSettings });
|
|
80
|
-
if (successful) {
|
|
81
|
-
await user.update({
|
|
82
|
-
userSettings: updatedSettings
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
return {
|
|
86
|
-
successful,
|
|
87
|
-
returnMessage
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
await user.update({
|
|
92
|
-
userSettings: updatedSettings
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
return {
|
|
96
|
-
userSettings: user.userSettings
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
exports.getUserSettingsByAdmin = getUserSettingsByAdmin;
|
|
101
|
-
exports.getUserSettings = getUserSettings;
|
|
1
|
+
const axios = require('axios');
|
|
2
|
+
const { AdminConfigModel } = require('../models/adminConfigModel');
|
|
3
|
+
const { getHashValue } = require('../lib/util');
|
|
4
|
+
const adapterRegistry = require('../adapter/registry');
|
|
5
|
+
|
|
6
|
+
async function getUserSettingsByAdmin({ rcAccessToken, rcAccountId }) {
|
|
7
|
+
let hashedRcAccountId = null;
|
|
8
|
+
if (rcAccountId) {
|
|
9
|
+
hashedRcAccountId = rcAccountId;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
const rcExtensionResponse = await axios.get(
|
|
13
|
+
'https://platform.ringcentral.com/restapi/v1.0/account/~/extension/~',
|
|
14
|
+
{
|
|
15
|
+
headers: {
|
|
16
|
+
Authorization: `Bearer ${rcAccessToken}`,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
hashedRcAccountId = getHashValue(rcExtensionResponse.data.account.id, process.env.HASH_KEY);
|
|
20
|
+
}
|
|
21
|
+
const adminConfig = await AdminConfigModel.findByPk(hashedRcAccountId);
|
|
22
|
+
return {
|
|
23
|
+
customManifestUrl: adminConfig?.customAdapter,
|
|
24
|
+
userSettings: adminConfig?.userSettings
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async function getUserSettings({ user, rcAccessToken, rcAccountId }) {
|
|
29
|
+
let userSettingsByAdmin = [];
|
|
30
|
+
if (rcAccessToken || rcAccountId) {
|
|
31
|
+
try {
|
|
32
|
+
userSettingsByAdmin = await getUserSettingsByAdmin({ rcAccessToken, rcAccountId });
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
userSettingsByAdmin = [];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// For non-readonly admin settings, user use its own setting
|
|
40
|
+
let userSettings = await user?.userSettings;
|
|
41
|
+
let result = {};
|
|
42
|
+
if (!userSettingsByAdmin?.userSettings) {
|
|
43
|
+
result = userSettings;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
if (!!userSettingsByAdmin?.userSettings && !!userSettings) {
|
|
47
|
+
const keys = Object.keys(userSettingsByAdmin.userSettings).concat(Object.keys(userSettings));
|
|
48
|
+
// distinct keys
|
|
49
|
+
for (const key of new Set(keys)) {
|
|
50
|
+
// from user's own settings
|
|
51
|
+
if ((userSettingsByAdmin.userSettings[key] === undefined || userSettingsByAdmin.userSettings[key].customizable) && userSettings[key] !== undefined) {
|
|
52
|
+
result[key] = {
|
|
53
|
+
customizable: true,
|
|
54
|
+
value: userSettings[key].value,
|
|
55
|
+
defaultValue: userSettings[key].defaultValue,
|
|
56
|
+
options: userSettings[key].options
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// from admin settings
|
|
60
|
+
else {
|
|
61
|
+
result[key] = userSettingsByAdmin.userSettings[key];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async function updateUserSettings({ user, userSettings, platformName }) {
|
|
70
|
+
const keys = Object.keys(userSettings || {});
|
|
71
|
+
let updatedSettings = {
|
|
72
|
+
...(user.userSettings || {})
|
|
73
|
+
};
|
|
74
|
+
for (const k of keys) {
|
|
75
|
+
updatedSettings[k] = userSettings[k];
|
|
76
|
+
}
|
|
77
|
+
const platformModule = adapterRegistry.getAdapter(platformName);
|
|
78
|
+
if (platformModule.onUpdateUserSettings) {
|
|
79
|
+
const { successful, returnMessage } = await platformModule.onUpdateUserSettings({ user, userSettings, updatedSettings });
|
|
80
|
+
if (successful) {
|
|
81
|
+
await user.update({
|
|
82
|
+
userSettings: updatedSettings
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
successful,
|
|
87
|
+
returnMessage
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
await user.update({
|
|
92
|
+
userSettings: updatedSettings
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
userSettings: user.userSettings
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
exports.getUserSettingsByAdmin = getUserSettingsByAdmin;
|
|
101
|
+
exports.getUserSettings = getUserSettings;
|
|
102
102
|
exports.updateUserSettings = updateUserSettings;
|