@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.
@@ -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://appexchange.steedos.cn";
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
+ }
@@ -0,0 +1,4 @@
1
+ name: upgradePackage
2
+ is_enable: true
3
+ label: 升级
4
+ 'on': record_only
@@ -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.16",
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.16",
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": "e73d6b5a8d6ee4dd746e5a1ad6777dab3cc816a8"
28
+ "gitHead": "9362f899fe320379414bcdce6ae7cd3d81197e5a"
28
29
  }
@@ -158,10 +158,10 @@ module.exports = {
158
158
  disablePackage:{
159
159
  async handler(ctx) {
160
160
  const { module } = ctx.params
161
- const packageConfog = await loader.disablePackage(module);
162
- const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfog.path));
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({}, packageConfog, {
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 packageConfog = await loader.enablePackage(module);
177
- const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfog.path));
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({}, packageConfog, {
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 packageConfog = {
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, packageConfog);
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({}, packageConfog, {
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 packageConfog;
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
  /**