dataverse-utils 2.2.12 → 2.3.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/lib/assemblyDeploy.js +24 -10
- package/lib/auth.js +24 -1
- package/lib/cachePlugin.js +1 -1
- package/lib/dataverse.service.js +1 -0
- package/lib/deploy.js +4 -23
- package/lib/generate.js +2 -2
- package/lib/models/pluginAssembly.js +3 -3
- package/lib/models/pluginPackage.js +89 -0
- package/lib/webResourceDeploy.js +3 -3
- package/package.json +2 -2
package/lib/assemblyDeploy.js
CHANGED
|
@@ -3,12 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.assemblyDeploy = void 0;
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
9
|
const pluginAssembly_1 = require("./models/pluginAssembly");
|
|
10
|
+
const pluginPackage_1 = require("./models/pluginPackage");
|
|
10
11
|
const logger_1 = require("./logger");
|
|
11
|
-
async function
|
|
12
|
+
async function assemblyDeploy(creds, apiConfig) {
|
|
12
13
|
const currentPath = '.';
|
|
13
14
|
const configFile = await fs_1.default.promises.readFile(path_1.default.resolve(currentPath, 'dataverse.config.json'), 'utf8');
|
|
14
15
|
if (configFile == null) {
|
|
@@ -16,14 +17,27 @@ async function deployAssembly(creds, apiConfig) {
|
|
|
16
17
|
return;
|
|
17
18
|
}
|
|
18
19
|
const config = JSON.parse(configFile);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
if (config.prefix) {
|
|
21
|
+
logger_1.logger.info('deploy plugin package');
|
|
22
|
+
try {
|
|
23
|
+
await (0, pluginPackage_1.deployPluginPackage)(config, apiConfig, creds.solution);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
logger_1.logger.error(error.message);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
logger_1.logger.done(`deployed plugin package ${config.prefix}_${config.name}\r\n`);
|
|
22
30
|
}
|
|
23
|
-
|
|
24
|
-
logger_1.logger.
|
|
25
|
-
|
|
31
|
+
else {
|
|
32
|
+
logger_1.logger.info('deploy assembly');
|
|
33
|
+
try {
|
|
34
|
+
await (0, pluginAssembly_1.deployAssembly)(config, apiConfig, creds.solution);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
logger_1.logger.error(error.message);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
logger_1.logger.done(`deployed assembly ${config.name}\r\n`);
|
|
26
41
|
}
|
|
27
|
-
logger_1.logger.done(`deployed assembly ${config.name}\r\n`);
|
|
28
42
|
}
|
|
29
|
-
exports.
|
|
43
|
+
exports.assemblyDeploy = assemblyDeploy;
|
package/lib/auth.js
CHANGED
|
@@ -1,10 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getAccessToken = void 0;
|
|
6
|
+
exports.getAccessToken = exports.onTokenFailure = void 0;
|
|
7
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
4
8
|
const cachePlugin_1 = require("./cachePlugin");
|
|
5
9
|
const msal_node_1 = require("@azure/msal-node");
|
|
6
10
|
const logger_1 = require("./logger");
|
|
7
11
|
const clientId = '51f81489-12ee-4a9e-aaae-a2591f45987d';
|
|
12
|
+
const onTokenFailure = async (url, error) => {
|
|
13
|
+
if (error) {
|
|
14
|
+
logger_1.logger.error(`failed to acquire access token: ${error}`);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
logger_1.logger.error('failed to acquire access token');
|
|
18
|
+
}
|
|
19
|
+
if ((0, cachePlugin_1.cacheExists)(url)) {
|
|
20
|
+
const { deleteToken } = await (0, prompts_1.default)({
|
|
21
|
+
type: 'confirm',
|
|
22
|
+
name: 'deleteToken',
|
|
23
|
+
message: `delete current token cache for ${url}?`
|
|
24
|
+
});
|
|
25
|
+
if (deleteToken) {
|
|
26
|
+
(0, cachePlugin_1.deleteCache)(url);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
exports.onTokenFailure = onTokenFailure;
|
|
8
31
|
const getAccessToken = async (tenant, url) => {
|
|
9
32
|
const config = {
|
|
10
33
|
auth: {
|
package/lib/cachePlugin.js
CHANGED
|
@@ -21,7 +21,7 @@ const decrypt = (text) => {
|
|
|
21
21
|
return decrypted;
|
|
22
22
|
};
|
|
23
23
|
const getCachePath = (url) => {
|
|
24
|
-
const org = url
|
|
24
|
+
const org = new URL(url).hostname.split('.')[0];
|
|
25
25
|
if (!fs_1.default.existsSync(path_1.default.join(os_1.default.homedir(), './.dataverse-utils/'))) {
|
|
26
26
|
fs_1.default.mkdirSync(path_1.default.join(os_1.default.homedir(), './.dataverse-utils/'));
|
|
27
27
|
}
|
package/lib/dataverse.service.js
CHANGED
|
@@ -9,6 +9,7 @@ var ComponentType;
|
|
|
9
9
|
ComponentType[ComponentType["PluginAssembly"] = 91] = "PluginAssembly";
|
|
10
10
|
ComponentType[ComponentType["SDKMessageProcessingStep"] = 92] = "SDKMessageProcessingStep";
|
|
11
11
|
ComponentType[ComponentType["SDKMessageProcessingStepImage"] = 93] = "SDKMessageProcessingStepImage";
|
|
12
|
+
ComponentType[ComponentType["PluginPackage"] = 10865] = "PluginPackage";
|
|
12
13
|
})(ComponentType = exports.ComponentType || (exports.ComponentType = {}));
|
|
13
14
|
async function addToSolution(id, solution, type, apiConfig) {
|
|
14
15
|
const data = {
|
package/lib/deploy.js
CHANGED
|
@@ -11,25 +11,6 @@ const assemblyDeploy_1 = require("./assemblyDeploy");
|
|
|
11
11
|
const webResourceDeploy_1 = require("./webResourceDeploy");
|
|
12
12
|
const node_1 = require("dataverse-webapi/lib/node");
|
|
13
13
|
const auth_1 = require("./auth");
|
|
14
|
-
const cachePlugin_1 = require("./cachePlugin");
|
|
15
|
-
const onTokenFailure = async (url, error) => {
|
|
16
|
-
if (error) {
|
|
17
|
-
logger_1.logger.error(`failed to acquire access token: ${error}`);
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
logger_1.logger.error('failed to acquire access token');
|
|
21
|
-
}
|
|
22
|
-
if ((0, cachePlugin_1.cacheExists)(url)) {
|
|
23
|
-
const { deleteToken } = await (0, prompts_1.default)({
|
|
24
|
-
type: 'confirm',
|
|
25
|
-
name: 'deleteToken',
|
|
26
|
-
message: `delete current token cache for ${url}?`
|
|
27
|
-
});
|
|
28
|
-
if (deleteToken) {
|
|
29
|
-
(0, cachePlugin_1.deleteCache)(url);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
14
|
async function deploy(type, files) {
|
|
34
15
|
if (!type || (type !== 'webresource' && type !== 'assembly')) {
|
|
35
16
|
const invalid = type !== undefined && type !== 'webresource' && type !== 'assembly';
|
|
@@ -57,20 +38,20 @@ async function deploy(type, files) {
|
|
|
57
38
|
token = await (0, auth_1.getAccessToken)(creds.tenant, creds.server);
|
|
58
39
|
}
|
|
59
40
|
catch (error) {
|
|
60
|
-
onTokenFailure(creds.server, error.message);
|
|
41
|
+
(0, auth_1.onTokenFailure)(creds.server, error.message);
|
|
61
42
|
return;
|
|
62
43
|
}
|
|
63
44
|
if (token == null || token.accessToken == null) {
|
|
64
|
-
onTokenFailure(creds.server);
|
|
45
|
+
(0, auth_1.onTokenFailure)(creds.server);
|
|
65
46
|
return;
|
|
66
47
|
}
|
|
67
48
|
const apiConfig = new node_1.WebApiConfig('8.2', token.accessToken, creds.server);
|
|
68
49
|
switch (type) {
|
|
69
50
|
case 'webresource':
|
|
70
|
-
await (0, webResourceDeploy_1.
|
|
51
|
+
await (0, webResourceDeploy_1.webResourceDeploy)(creds, apiConfig, files);
|
|
71
52
|
break;
|
|
72
53
|
case 'assembly':
|
|
73
|
-
await (0, assemblyDeploy_1.
|
|
54
|
+
await (0, assemblyDeploy_1.assemblyDeploy)(creds, apiConfig);
|
|
74
55
|
break;
|
|
75
56
|
default:
|
|
76
57
|
break;
|
package/lib/generate.js
CHANGED
|
@@ -31,11 +31,11 @@ async function generate(table) {
|
|
|
31
31
|
token = await (0, auth_1.getAccessToken)(creds.tenant, creds.server);
|
|
32
32
|
}
|
|
33
33
|
catch (error) {
|
|
34
|
-
|
|
34
|
+
(0, auth_1.onTokenFailure)(creds.server, error.message);
|
|
35
35
|
return;
|
|
36
36
|
}
|
|
37
37
|
if (token == null || token.accessToken == null) {
|
|
38
|
-
|
|
38
|
+
(0, auth_1.onTokenFailure)(creds.server);
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
41
41
|
const apiConfig = new node_1.WebApiConfig('8.2', token.accessToken, creds.server);
|
|
@@ -3,14 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.deployAssembly = void 0;
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const glob_1 = __importDefault(require("glob"));
|
|
9
9
|
const node_1 = require("dataverse-webapi/lib/node");
|
|
10
10
|
const pluginType_1 = require("./pluginType");
|
|
11
11
|
const dataverse_service_1 = require("../dataverse.service");
|
|
12
12
|
const logger_1 = require("../logger");
|
|
13
|
-
async function
|
|
13
|
+
async function deployAssembly(config, apiConfig, solution) {
|
|
14
14
|
const files = glob_1.default.sync(`**/${config.name}.dll`);
|
|
15
15
|
if (files.length === 0) {
|
|
16
16
|
logger_1.logger.warn(`assembly ${config.name}.dll not found`);
|
|
@@ -63,7 +63,7 @@ async function deploy(config, apiConfig, solution) {
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
-
exports.
|
|
66
|
+
exports.deployAssembly = deployAssembly;
|
|
67
67
|
async function retrieveAssembly(name, apiConfig) {
|
|
68
68
|
const options = `$select=pluginassemblyid&$filter=name eq '${name}'`;
|
|
69
69
|
const result = await (0, node_1.retrieveMultiple)(apiConfig, 'pluginassemblies', options);
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.deployPluginPackage = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const glob_1 = __importDefault(require("glob"));
|
|
9
|
+
const node_1 = require("dataverse-webapi/lib/node");
|
|
10
|
+
const pluginAssembly_1 = require("./pluginAssembly");
|
|
11
|
+
const dataverse_service_1 = require("../dataverse.service");
|
|
12
|
+
const logger_1 = require("../logger");
|
|
13
|
+
async function deployPluginPackage(config, apiConfig, solution) {
|
|
14
|
+
const files = glob_1.default.sync(`**/${config.name}.*.nupkg`);
|
|
15
|
+
if (files.length === 0) {
|
|
16
|
+
logger_1.logger.warn(`package ${config.name}.nupkg not found`);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const content = (await fs_1.default.promises.readFile(files[0])).toString('base64');
|
|
20
|
+
let packageId = '';
|
|
21
|
+
try {
|
|
22
|
+
packageId = await retrievePackage(config.prefix, config.name, apiConfig);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
logger_1.logger.error(`failed to retrieve package ${config.name}: ${error.message}`);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (packageId != '') {
|
|
29
|
+
try {
|
|
30
|
+
await updatePackage(packageId, config, content, apiConfig);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
throw new Error(`failed to update package: ${error.message}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
try {
|
|
38
|
+
packageId = await createPackage(config, content, apiConfig);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
throw new Error(`failed to create package: ${error.message}`);
|
|
42
|
+
}
|
|
43
|
+
if (solution != undefined) {
|
|
44
|
+
try {
|
|
45
|
+
await (0, dataverse_service_1.addToSolution)(packageId, solution, dataverse_service_1.ComponentType.PluginPackage, apiConfig);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
logger_1.logger.error(`failed to add package to solution: ${error.message}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (config.assembly != null) {
|
|
53
|
+
try {
|
|
54
|
+
config.assembly['packageid@odata.bind'] = `/pluginpackages(${packageId})`;
|
|
55
|
+
await (0, pluginAssembly_1.deployAssembly)(config.assembly, apiConfig, solution);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
logger_1.logger.error(error.message);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.deployPluginPackage = deployPluginPackage;
|
|
64
|
+
async function retrievePackage(prefix, name, apiConfig) {
|
|
65
|
+
const options = `$select=pluginpackageid&$filter=contains(name, '${prefix}_${name}')`;
|
|
66
|
+
const result = await (0, node_1.retrieveMultiple)(apiConfig, 'pluginpackages', options);
|
|
67
|
+
return result.value.length > 0 ? result.value[0].pluginassemblyid : '';
|
|
68
|
+
}
|
|
69
|
+
async function createPackage(config, content, apiConfig) {
|
|
70
|
+
logger_1.logger.info(`create assembly ${config.name}`);
|
|
71
|
+
const pluginPackage = {
|
|
72
|
+
name: `${config.prefix}_${config.name}`,
|
|
73
|
+
version: config.version,
|
|
74
|
+
content: content
|
|
75
|
+
};
|
|
76
|
+
const result = await (0, node_1.createWithReturnData)(apiConfig, 'pluginpackages', pluginPackage, '$select=pluginpackageid');
|
|
77
|
+
if (result.error) {
|
|
78
|
+
throw new Error(result.error.message);
|
|
79
|
+
}
|
|
80
|
+
return result.pluginpackageid;
|
|
81
|
+
}
|
|
82
|
+
async function updatePackage(id, config, content, apiConfig) {
|
|
83
|
+
logger_1.logger.info(`update assembly ${config.name}`);
|
|
84
|
+
const assembly = {
|
|
85
|
+
content: content,
|
|
86
|
+
version: config.version
|
|
87
|
+
};
|
|
88
|
+
return (0, node_1.update)(apiConfig, 'pluginpackages', id, assembly);
|
|
89
|
+
}
|
package/lib/webResourceDeploy.js
CHANGED
|
@@ -3,12 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.webResourceDeploy = void 0;
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
9
|
const logger_1 = require("./logger");
|
|
10
10
|
const webResource_1 = require("./models/webResource");
|
|
11
|
-
async function
|
|
11
|
+
async function webResourceDeploy(creds, apiConfig, files) {
|
|
12
12
|
const currentPath = '.';
|
|
13
13
|
const configFile = await fs_1.default.promises.readFile(path_1.default.resolve(currentPath, 'dataverse.config.json'), 'utf8');
|
|
14
14
|
if (configFile == null) {
|
|
@@ -26,4 +26,4 @@ async function deployWebResource(creds, apiConfig, files) {
|
|
|
26
26
|
}
|
|
27
27
|
logger_1.logger.done('deployed web resources');
|
|
28
28
|
}
|
|
29
|
-
exports.
|
|
29
|
+
exports.webResourceDeploy = webResourceDeploy;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dataverse-utils",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Utilities for interacting with Dataverse environments",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"@azure/msal-node": "^1.12.0",
|
|
24
24
|
"commander": "^8.3.0",
|
|
25
25
|
"cryptr": "^6.0.3",
|
|
26
|
-
"dataverse-webapi": "^2.0
|
|
26
|
+
"dataverse-webapi": "^2.1.0",
|
|
27
27
|
"envinfo": "^7.8.1",
|
|
28
28
|
"figures": "^3.2.0",
|
|
29
29
|
"glob": "^7.2.0",
|