@steedos/service-package-registry 2.1.16 → 2.1.20
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/main/default/manager/packages.js +26 -1
- package/main/default/manager/registry.js +2 -2
- package/main/default/objects/steedos_packages/buttons/show_packages_store.button.js +2 -2
- package/main/default/objects/steedos_packages/buttons/upgradePackage.button.js +96 -0
- package/main/default/objects/steedos_packages/buttons/upgradePackage.button.yml +4 -0
- package/main/default/routes/nodes.router.js +45 -0
- package/package.json +4 -3
- package/package.service.js +55 -10
|
@@ -3,6 +3,7 @@ const loader = require('./loader');
|
|
|
3
3
|
const registry = require('./registry');
|
|
4
4
|
const path = require("path");
|
|
5
5
|
const objectql = require('@steedos/objectql');
|
|
6
|
+
const packageJson = require('package-json');
|
|
6
7
|
const _ = require('lodash');
|
|
7
8
|
|
|
8
9
|
const getAllPackages = async ()=>{
|
|
@@ -97,13 +98,37 @@ const maintainSystemFiles = ()=>{
|
|
|
97
98
|
"name": "steedos-project-packages",
|
|
98
99
|
"version": "1.0.0",
|
|
99
100
|
"description": "",
|
|
101
|
+
"license": "MIT",
|
|
100
102
|
"author": ""
|
|
101
103
|
}
|
|
102
104
|
`)
|
|
103
105
|
}
|
|
104
106
|
}
|
|
105
107
|
|
|
108
|
+
const getPackageVersions = async (packageName, options)=>{
|
|
109
|
+
const result = await packageJson(packageName.toLowerCase(), {
|
|
110
|
+
allVersions: true
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
const versions = [];
|
|
114
|
+
|
|
115
|
+
const distTags = result['dist-tags'];
|
|
116
|
+
_.each(distTags, function(version, tag){
|
|
117
|
+
versions.push({version: version, tag: tag})
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
_.each(_.reverse(_.keys(result.versions)), function(version){
|
|
121
|
+
if(versions.length < 50){
|
|
122
|
+
if(!_.find(versions, function(v){return v.version == version})){
|
|
123
|
+
versions.push({version: version})
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
return versions;
|
|
128
|
+
}
|
|
129
|
+
|
|
106
130
|
module.exports = {
|
|
107
131
|
maintainSystemFiles,
|
|
108
|
-
getAllPackages
|
|
132
|
+
getAllPackages,
|
|
133
|
+
getPackageVersions
|
|
109
134
|
}
|
|
@@ -120,7 +120,7 @@ async function installModule(module,version,url) {
|
|
|
120
120
|
// if( check !== false){
|
|
121
121
|
// return check;
|
|
122
122
|
// }
|
|
123
|
-
console.log(`installModule`, module,version,url)
|
|
123
|
+
// console.log(`installModule`, module,version,url)
|
|
124
124
|
module = module || "";
|
|
125
125
|
activePromise = activePromise.then(async function() {
|
|
126
126
|
//TODO: ensure module is 'safe'
|
|
@@ -196,7 +196,7 @@ async function installModule(module,version,url) {
|
|
|
196
196
|
return exec.run(yarnCommand,yarnArgs,{
|
|
197
197
|
cwd: installDir
|
|
198
198
|
}, true).then(result => {
|
|
199
|
-
console.log(`result ok`, result)
|
|
199
|
+
// console.log(`result ok`, result)
|
|
200
200
|
try {
|
|
201
201
|
const packagePath = path.dirname(require.resolve(`${module}/package.json`, {
|
|
202
202
|
paths: [path.join(settings.userDir, 'node_modules')]
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
module.exports = {
|
|
2
2
|
show_packages_store: function () {
|
|
3
|
-
let packageService = "https://
|
|
3
|
+
let packageService = "https://www.steedos.cn";
|
|
4
4
|
|
|
5
5
|
if(Meteor.settings.public.webservices.app_exchange && Meteor.settings.public.webservices.app_exchange.url){
|
|
6
6
|
packageService = Meteor.settings.public.webservices.app_exchange.url;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
return window.open(`${packageService}?client=${window.btoa(Meteor.absoluteUrl('', window.location.origin))}&install_nodes=${window.btoa(Steedos.PackageRegistry.getNodes().join(','))}`)
|
|
9
|
+
return window.open(`${packageService}?client=${window.btoa(Meteor.absoluteUrl('', window.location.origin))}&install_nodes=${window.btoa(Steedos.PackageRegistry.getNodes().join(','))}`);
|
|
10
10
|
// return window.open(`${packageService}/app-store?client=${window.btoa(Meteor.absoluteUrl('', window.location.origin))}&install_nodes=${window.btoa(Steedos.PackageRegistry.getNodes().join(','))}`)
|
|
11
11
|
|
|
12
12
|
SteedosUI.showModal(stores.ComponentRegistry.components.ObjectTable, {
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
upgradePackage: function (object_name, record_id) {
|
|
3
|
+
const record = Creator.odata.get(object_name, record_id);
|
|
4
|
+
console.log(`upgradePackage record`, record)
|
|
5
|
+
$("body").addClass('loading')
|
|
6
|
+
SteedosUI.showModal(stores.ComponentRegistry.components.ObjectTable, {
|
|
7
|
+
title: `请选择升级 ${record.label || record.name} 的版本`,
|
|
8
|
+
listSchema:{
|
|
9
|
+
columns: [
|
|
10
|
+
{field: "version"},
|
|
11
|
+
{field: "tag"},
|
|
12
|
+
],
|
|
13
|
+
},
|
|
14
|
+
objectSchema: {
|
|
15
|
+
fields: {
|
|
16
|
+
version: {
|
|
17
|
+
type: 'text',
|
|
18
|
+
label: '版本号'
|
|
19
|
+
},
|
|
20
|
+
tag: {
|
|
21
|
+
type: 'select',
|
|
22
|
+
label: '标签',
|
|
23
|
+
options: [
|
|
24
|
+
{label: '正式版', value: 'latest', color:"3df53d"},
|
|
25
|
+
{label: '测试版', value: 'next', color: "f89406"}
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
rows: function(){
|
|
31
|
+
var versions = []
|
|
32
|
+
try {
|
|
33
|
+
versions = Steedos.authRequest(`/api/nodes/versions?module=${record.name}`, { type: 'get', async: false});
|
|
34
|
+
} catch (error) {
|
|
35
|
+
toastr.error(error.message);
|
|
36
|
+
}
|
|
37
|
+
$("body").removeClass("loading")
|
|
38
|
+
return versions;
|
|
39
|
+
}(),
|
|
40
|
+
rowSelection: 'single',
|
|
41
|
+
rowKey: 'version',
|
|
42
|
+
onFinish: async (selectedRowKeys, selectedRows) => {
|
|
43
|
+
console.log("selectedRows:", selectedRowKeys, selectedRows);
|
|
44
|
+
if(selectedRowKeys.length < 1){
|
|
45
|
+
throw new Error(`请选择要升级的版本`);
|
|
46
|
+
}
|
|
47
|
+
const installVersion = selectedRowKeys[0];
|
|
48
|
+
if(record.version == installVersion ){
|
|
49
|
+
toastr.info(`您已安装版本${installVersion}`);
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
swal({
|
|
54
|
+
title: `升级`,
|
|
55
|
+
text: `确定要升级到 ${installVersion}?`,
|
|
56
|
+
html: true,
|
|
57
|
+
showCancelButton: true,
|
|
58
|
+
confirmButtonText: '升级',
|
|
59
|
+
cancelButtonText: TAPi18n.__('Cancel')
|
|
60
|
+
}, function (option) {
|
|
61
|
+
if (option) {
|
|
62
|
+
toastr.info('升级中,请稍后...', null, {timeOut: false});
|
|
63
|
+
Steedos.authRequest(Steedos.absoluteUrl('/api/nodes/upgrade'), {type: 'post', async: false, data: JSON.stringify({
|
|
64
|
+
module: record.name,
|
|
65
|
+
version: installVersion
|
|
66
|
+
}),
|
|
67
|
+
success: function(){
|
|
68
|
+
setTimeout(function(){
|
|
69
|
+
toastr.clear();
|
|
70
|
+
toastr.success('升级成功');
|
|
71
|
+
if(record_id){
|
|
72
|
+
SteedosUI.reloadRecord(object_name, record_id)
|
|
73
|
+
}
|
|
74
|
+
FlowRouter.reload()
|
|
75
|
+
}, 1000 * 10)
|
|
76
|
+
},
|
|
77
|
+
error: function(XMLHttpRequest){
|
|
78
|
+
toastr.clear();
|
|
79
|
+
toastr.error(XMLHttpRequest.responseJSON.error);
|
|
80
|
+
}
|
|
81
|
+
})
|
|
82
|
+
}
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
},
|
|
89
|
+
upgradePackageVisible: function (object_name, record_id) {
|
|
90
|
+
const record = Creator.odata.get(object_name, record_id);
|
|
91
|
+
if (record.status === 'enable' && !record.local) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
return false
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -117,5 +117,50 @@ router.post('/api/nodes/enable', core.requireAuthentication, async function (req
|
|
|
117
117
|
res.status(500).send({error: error.message});
|
|
118
118
|
}
|
|
119
119
|
});
|
|
120
|
+
router.get('/api/nodes/versions', core.requireAuthentication, async function (req, res) {
|
|
121
|
+
const userSession = req.user;
|
|
122
|
+
const isSpaceAdmin = userSession.is_space_admin;
|
|
123
|
+
console.log(`req.query`, req.query)
|
|
124
|
+
const body = req.query;
|
|
125
|
+
const { module } = body || {};
|
|
126
|
+
if(!module){
|
|
127
|
+
return res.status(500).send({ message: 'Not find module' });
|
|
128
|
+
}
|
|
129
|
+
if(!isSpaceAdmin){
|
|
130
|
+
return res.status(401).send({ message: 'No permission' });
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
|
|
134
|
+
let broker = schema.broker;
|
|
135
|
+
const result = await broker.call(`~packages-project-server.getPackageVersions`, {
|
|
136
|
+
module
|
|
137
|
+
})
|
|
138
|
+
res.status(200).send(result); //TODO 完善返回信息
|
|
139
|
+
} catch (error) {
|
|
140
|
+
console.error(error);
|
|
141
|
+
res.status(500).send({error: error.message});
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
router.post('/api/nodes/upgrade', core.requireAuthentication, async function (req, res) {
|
|
146
|
+
const userSession = req.user;
|
|
147
|
+
const isSpaceAdmin = userSession.is_space_admin;
|
|
148
|
+
const body = req.body;
|
|
149
|
+
if(!isSpaceAdmin){
|
|
150
|
+
return res.status(401).send({ message: 'No permission' });
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
const { module, version} = body || {};
|
|
154
|
+
let broker = schema.broker;
|
|
155
|
+
const result = await broker.call(`~packages-project-server.upgradePackage`, {
|
|
156
|
+
module, version
|
|
157
|
+
})
|
|
158
|
+
res.status(200).send(result);
|
|
159
|
+
} catch (error) {
|
|
160
|
+
console.error(error);
|
|
161
|
+
res.status(500).send({error: error.message});
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
|
|
120
165
|
|
|
121
166
|
exports.default = router;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/service-package-registry",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.20",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "package.service.js",
|
|
6
6
|
"scripts": {
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"author": "",
|
|
10
10
|
"license": "ISC",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@steedos/service-package-loader": "2.1.
|
|
12
|
+
"@steedos/service-package-loader": "2.1.20",
|
|
13
13
|
"fs-extra": "8.1.0",
|
|
14
14
|
"i18next": "20.3.2",
|
|
15
15
|
"json-stringify-safe": "5.0.1",
|
|
@@ -18,11 +18,12 @@
|
|
|
18
18
|
"lodash.clonedeep": "^4.5.0",
|
|
19
19
|
"moment-timezone": "0.5.33",
|
|
20
20
|
"npm-package-arg": "~8.1.5",
|
|
21
|
+
"package-json": "^7.0.0",
|
|
21
22
|
"radwag-mass": "~1.0.5"
|
|
22
23
|
},
|
|
23
24
|
"private": false,
|
|
24
25
|
"publishConfig": {
|
|
25
26
|
"access": "public"
|
|
26
27
|
},
|
|
27
|
-
"gitHead": "
|
|
28
|
+
"gitHead": "9362f899fe320379414bcdce6ae7cd3d81197e5a"
|
|
28
29
|
}
|
package/package.service.js
CHANGED
|
@@ -158,10 +158,10 @@ module.exports = {
|
|
|
158
158
|
disablePackage:{
|
|
159
159
|
async handler(ctx) {
|
|
160
160
|
const { module } = ctx.params
|
|
161
|
-
const
|
|
162
|
-
const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(),
|
|
161
|
+
const packageConfig = await loader.disablePackage(module);
|
|
162
|
+
const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
|
|
163
163
|
await ctx.broker.call(`@steedos/service-packages.install`, {
|
|
164
|
-
serviceInfo: Object.assign({},
|
|
164
|
+
serviceInfo: Object.assign({}, packageConfig, {
|
|
165
165
|
nodeID: ctx.broker.nodeID,
|
|
166
166
|
instanceID: ctx.broker.instanceID,
|
|
167
167
|
metadata: metadata
|
|
@@ -173,10 +173,10 @@ module.exports = {
|
|
|
173
173
|
enablePackage:{
|
|
174
174
|
async handler(ctx) {
|
|
175
175
|
const { module } = ctx.params
|
|
176
|
-
const
|
|
177
|
-
const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(),
|
|
176
|
+
const packageConfig = await loader.enablePackage(module);
|
|
177
|
+
const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
|
|
178
178
|
await ctx.broker.call(`@steedos/service-packages.install`, {
|
|
179
|
-
serviceInfo: Object.assign({},
|
|
179
|
+
serviceInfo: Object.assign({}, packageConfig, {
|
|
180
180
|
nodeID: ctx.broker.nodeID,
|
|
181
181
|
instanceID: ctx.broker.instanceID,
|
|
182
182
|
metadata: metadata
|
|
@@ -239,6 +239,18 @@ module.exports = {
|
|
|
239
239
|
throw new MoleculerError(error.message, 500, "ERR_SOMETHING");
|
|
240
240
|
}
|
|
241
241
|
}
|
|
242
|
+
},
|
|
243
|
+
getPackageVersions: {
|
|
244
|
+
async handler(ctx) {
|
|
245
|
+
const { module } = ctx.params
|
|
246
|
+
return await this.getPackageVersions(module);
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
upgradePackage: {
|
|
250
|
+
async handler(ctx) {
|
|
251
|
+
const { module, version } = ctx.params
|
|
252
|
+
return await this.upgradePackage(module, version);
|
|
253
|
+
}
|
|
242
254
|
}
|
|
243
255
|
},
|
|
244
256
|
|
|
@@ -261,7 +273,7 @@ module.exports = {
|
|
|
261
273
|
}else{
|
|
262
274
|
enable = false;
|
|
263
275
|
}
|
|
264
|
-
const
|
|
276
|
+
const packageConfig = {
|
|
265
277
|
label: label,
|
|
266
278
|
version: version,
|
|
267
279
|
description: description || '',
|
|
@@ -269,10 +281,10 @@ module.exports = {
|
|
|
269
281
|
enable: enable,
|
|
270
282
|
path: util.getPackageRelativePath(process.cwd(), packagePath)
|
|
271
283
|
}
|
|
272
|
-
loader.appendToPackagesConfig(module,
|
|
284
|
+
loader.appendToPackagesConfig(module, packageConfig);
|
|
273
285
|
const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
|
|
274
286
|
await broker.call(`@steedos/service-packages.install`, {
|
|
275
|
-
serviceInfo: Object.assign({},
|
|
287
|
+
serviceInfo: Object.assign({}, packageConfig, {
|
|
276
288
|
name: module,
|
|
277
289
|
enable: enable,
|
|
278
290
|
nodeID: broker.nodeID,
|
|
@@ -280,7 +292,7 @@ module.exports = {
|
|
|
280
292
|
metadata: metadata
|
|
281
293
|
})
|
|
282
294
|
})
|
|
283
|
-
return
|
|
295
|
+
return packageConfig;
|
|
284
296
|
}
|
|
285
297
|
},
|
|
286
298
|
getCloudSaasPurchasedPackages:{
|
|
@@ -322,6 +334,39 @@ module.exports = {
|
|
|
322
334
|
return { packages : packages}
|
|
323
335
|
}
|
|
324
336
|
},
|
|
337
|
+
getPackageVersions: {
|
|
338
|
+
async handler(module) {
|
|
339
|
+
return packages.getPackageVersions(module);
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
upgradePackage: {
|
|
343
|
+
async handler(module, version) {
|
|
344
|
+
const packagePath = await registry.installModule(module, version);
|
|
345
|
+
const enable = true;
|
|
346
|
+
if(enable){
|
|
347
|
+
await loader.loadPackage(module, packagePath);
|
|
348
|
+
}else{
|
|
349
|
+
enable = false;
|
|
350
|
+
}
|
|
351
|
+
const packageConfig = {
|
|
352
|
+
version: version,
|
|
353
|
+
enable: enable,
|
|
354
|
+
path: util.getPackageRelativePath(process.cwd(), packagePath)
|
|
355
|
+
}
|
|
356
|
+
const newConfig = loader.appendToPackagesConfig(module, packageConfig);
|
|
357
|
+
const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
|
|
358
|
+
await this.broker.call(`@steedos/service-packages.install`, {
|
|
359
|
+
serviceInfo: Object.assign({}, newConfig, {
|
|
360
|
+
name: module,
|
|
361
|
+
enable: enable,
|
|
362
|
+
nodeID: this.broker.nodeID,
|
|
363
|
+
instanceID: this.broker.instanceID,
|
|
364
|
+
metadata: metadata
|
|
365
|
+
})
|
|
366
|
+
})
|
|
367
|
+
return packageConfig;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
325
370
|
},
|
|
326
371
|
|
|
327
372
|
/**
|