@yrpri/api 9.0.125 → 9.0.127
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yrpri/api",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.127",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Robert Bjarnason & Citizens Foundation",
|
|
6
6
|
"repository": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"@google-cloud/vertexai": "^1.10.0",
|
|
26
26
|
"@google-cloud/vision": "^5.1.0",
|
|
27
27
|
"@node-saml/passport-saml": "^5.0.1",
|
|
28
|
-
"@policysynth/agents": "^1.3.
|
|
28
|
+
"@policysynth/agents": "^1.3.104",
|
|
29
29
|
"async": "^3.2.6",
|
|
30
30
|
"authorized": "^1.0.0",
|
|
31
31
|
"aws-sdk": "^2.1692.0",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import ExcelJS from 'exceljs';
|
|
2
|
+
import models from '../../models/index.cjs';
|
|
3
|
+
(async () => {
|
|
4
|
+
try {
|
|
5
|
+
const [xlsPath] = process.argv.slice(2);
|
|
6
|
+
if (!xlsPath) {
|
|
7
|
+
console.log('Usage: node importDomainsFromXls.js <path-to-xls>');
|
|
8
|
+
process.exit(1);
|
|
9
|
+
}
|
|
10
|
+
const workbook = new ExcelJS.Workbook();
|
|
11
|
+
await workbook.xlsx.readFile(xlsPath);
|
|
12
|
+
const worksheet = workbook.getWorksheet(1);
|
|
13
|
+
if (!worksheet) {
|
|
14
|
+
console.error('No worksheet found in file');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
await models.sequelize.transaction(async (t) => {
|
|
18
|
+
for (let i = 2; i <= worksheet.rowCount; i++) {
|
|
19
|
+
const row = worksheet.getRow(i);
|
|
20
|
+
const name = String(row.getCell(1).text).trim();
|
|
21
|
+
const description = String(row.getCell(2).text).trim();
|
|
22
|
+
if (!name)
|
|
23
|
+
continue;
|
|
24
|
+
const existing = await models.Domain.findOne({
|
|
25
|
+
where: { name },
|
|
26
|
+
transaction: t
|
|
27
|
+
});
|
|
28
|
+
if (existing) {
|
|
29
|
+
await existing.update({ description }, { transaction: t });
|
|
30
|
+
console.log(`Updated domain ${existing.domain_name}`);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
const randomPart = Math.random().toString(36).substring(2, 10);
|
|
34
|
+
const domainName = `domain_${randomPart}`;
|
|
35
|
+
await models.Domain.create({
|
|
36
|
+
name,
|
|
37
|
+
description,
|
|
38
|
+
domain_name: domainName,
|
|
39
|
+
access: 1,
|
|
40
|
+
user_id: 1,
|
|
41
|
+
ip_address: '127.0.0.1',
|
|
42
|
+
user_agent: 'import-script',
|
|
43
|
+
default_locale: 'en',
|
|
44
|
+
configuration: {}
|
|
45
|
+
}, { transaction: t });
|
|
46
|
+
console.log(`Created domain ${domainName}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
await models.sequelize.close();
|
|
51
|
+
console.log('Import completed');
|
|
52
|
+
process.exit(0);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
console.error(err);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import ExcelJS from 'exceljs';
|
|
2
|
+
import models from '../../models/index.cjs';
|
|
3
|
+
(async () => {
|
|
4
|
+
try {
|
|
5
|
+
const [filePath] = process.argv.slice(2);
|
|
6
|
+
if (!filePath) {
|
|
7
|
+
console.log('Usage: node importUsersForDomainsFromXls.js <xlsFilePath>');
|
|
8
|
+
process.exit(1);
|
|
9
|
+
}
|
|
10
|
+
const workbook = new ExcelJS.Workbook();
|
|
11
|
+
await workbook.xlsx.readFile(filePath);
|
|
12
|
+
const sheet = workbook.worksheets[0];
|
|
13
|
+
const transaction = await models.sequelize.transaction();
|
|
14
|
+
try {
|
|
15
|
+
for (let i = 2; i <= sheet.rowCount; i++) {
|
|
16
|
+
const row = sheet.getRow(i);
|
|
17
|
+
const domainName = String(row.getCell(1).text).trim();
|
|
18
|
+
const fullUserName = String(row.getCell(2).text).trim();
|
|
19
|
+
const userEmail = String(row.getCell(3).text).trim().toLowerCase();
|
|
20
|
+
const userSsn = String(row.getCell(4).text).trim();
|
|
21
|
+
const userSsnNumber = userSsn ? Number(userSsn) : undefined;
|
|
22
|
+
if (!domainName || !fullUserName || !userEmail) {
|
|
23
|
+
throw new Error(`Missing data in row ${i}`);
|
|
24
|
+
}
|
|
25
|
+
const existingEmail = await models.User.unscoped().findOne({
|
|
26
|
+
where: { email: userEmail },
|
|
27
|
+
transaction,
|
|
28
|
+
});
|
|
29
|
+
if (existingEmail) {
|
|
30
|
+
throw new Error(`User with email ${userEmail} already exists`);
|
|
31
|
+
}
|
|
32
|
+
if (userSsn) {
|
|
33
|
+
const existingSsn = await models.User.unscoped().findOne({
|
|
34
|
+
where: { ssn: userSsn },
|
|
35
|
+
transaction,
|
|
36
|
+
});
|
|
37
|
+
if (existingSsn) {
|
|
38
|
+
throw new Error(`User with ssn ${userSsn} already exists`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
let domain = await models.Domain.findOne({
|
|
42
|
+
where: { domain_name: domainName },
|
|
43
|
+
transaction,
|
|
44
|
+
});
|
|
45
|
+
if (!domain) {
|
|
46
|
+
domain = await models.Domain.create({
|
|
47
|
+
domain_name: domainName,
|
|
48
|
+
name: domainName,
|
|
49
|
+
access: 1,
|
|
50
|
+
ip_address: '127.0.0.1',
|
|
51
|
+
user_agent: 'xls-import',
|
|
52
|
+
default_locale: 'en',
|
|
53
|
+
configuration: {},
|
|
54
|
+
}, { transaction });
|
|
55
|
+
}
|
|
56
|
+
const user = await models.User.create({
|
|
57
|
+
email: userEmail,
|
|
58
|
+
name: fullUserName,
|
|
59
|
+
status: 'active',
|
|
60
|
+
ssn: userSsnNumber,
|
|
61
|
+
}, { transaction });
|
|
62
|
+
await domain.addDomainUsers(user, { transaction });
|
|
63
|
+
}
|
|
64
|
+
await transaction.commit();
|
|
65
|
+
console.log('Import completed');
|
|
66
|
+
process.exit(0);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
await transaction.rollback();
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
console.error(err);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
})();
|