@steedos/service-package-registry 2.5.13 → 2.5.14-beta.11

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.
@@ -35,6 +35,8 @@ const appendToPackagesConfig = (packageName, options)=>{
35
35
  loadPackage(packageName, packagePath);
36
36
  }
37
37
  }else{
38
+ // 对于已经存在的软件包, 不支持使用传入的enable控制软件包状态.
39
+ delete options.enable
38
40
  packages[packageName] = Object.assign(packages[packageName], options)
39
41
  }
40
42
  }else{
@@ -157,7 +159,7 @@ const isPackage = (name)=>{
157
159
  }
158
160
  }
159
161
 
160
- const loadDependency = async (mainPackageInfo, dependencyName, dependencyVersion)=>{
162
+ const loadDependency = async (mainPackageInfo = {}, dependencyName, dependencyVersion)=>{
161
163
  // console.log(`loadDependency`, mainPackageInfo, dependencyName, dependencyVersion)
162
164
  if(mainPackageInfo.static == true){
163
165
  return ;
@@ -184,9 +184,22 @@ const scanPackageMetadatas = async (packagePath) => {
184
184
  return packageMetadatas;
185
185
  }
186
186
 
187
+ const checkDependencies = async (packagePath)=>{
188
+ const packageServiceConfig = require(path.join(packagePath, 'package.service.js'));
189
+ const dependencies = packageServiceConfig?.dependencies || [];
190
+ for(const item of dependencies){
191
+ const hasService = await objectql.getSteedosSchema().broker.registry.hasService(item);
192
+ if(!hasService){
193
+ throw new Error(`依赖项${item}未启动, 请先启动依赖项`)
194
+ }
195
+ }
196
+ return true;
197
+ }
198
+
187
199
  module.exports = {
188
200
  maintainSystemFiles,
189
201
  getAllPackages,
190
202
  getPackageVersions,
191
- scanPackageMetadatas
203
+ scanPackageMetadatas,
204
+ checkDependencies
192
205
  }
@@ -3,7 +3,6 @@ columns:
3
3
  - field: label
4
4
  wrap: false
5
5
  - field: description
6
- width: '150'
7
6
  wrap: false
8
7
  - field: version
9
8
  wrap: false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/service-package-registry",
3
- "version": "2.5.13",
3
+ "version": "2.5.14-beta.11",
4
4
  "description": "",
5
5
  "main": "package.service.js",
6
6
  "scripts": {
@@ -9,11 +9,11 @@
9
9
  "author": "",
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
- "@steedos/auth": "2.5.13",
13
- "@steedos/core": "2.5.13",
14
- "@steedos/metadata-core": "2.5.13",
15
- "@steedos/objectql": "2.5.13",
16
- "@steedos/service-package-loader": "2.5.13",
12
+ "@steedos/auth": "2.5.14-beta.11",
13
+ "@steedos/core": "2.5.14-beta.11",
14
+ "@steedos/metadata-core": "2.5.14-beta.11",
15
+ "@steedos/objectql": "2.5.14-beta.11",
16
+ "@steedos/service-package-loader": "2.5.14-beta.11",
17
17
  "fs-extra": "8.1.0",
18
18
  "i18next": "20.3.2",
19
19
  "json-stringify-safe": "5.0.1",
@@ -31,5 +31,5 @@
31
31
  "publishConfig": {
32
32
  "access": "public"
33
33
  },
34
- "gitHead": "70670f8b8ea0aad61e73a3258b5c8aaf6139c682"
34
+ "gitHead": "9487d14d46273b13206f974b6bbed5d230441d2d"
35
35
  }
@@ -36,11 +36,6 @@ module.exports = {
36
36
  name: this.name,
37
37
  isPackage: false
38
38
  },
39
- STEEDOS_CLOUD_URL: process.env.STEEDOS_CLOUD_URL ? process.env.STEEDOS_CLOUD_URL : 'https://console.steedos.cn',
40
- STEEDOS_CLOUD_SPACE_ID: process.env.STEEDOS_CLOUD_SPACE_ID,
41
- STEEDOS_CLOUD_API_KEY: process.env.STEEDOS_CLOUD_API_KEY,
42
- STEEDOS_REGISTRY_URL: process.env.STEEDOS_REGISTRY_URL ? process.env.STEEDOS_REGISTRY_URL : 'https://registry.steedos.cn/',
43
- STEEDOS_CLOUD_SYNC_PACKAGES: validator.toBoolean(process.env.STEEDOS_CLOUD_SYNC_PACKAGES || 'false', true),
44
39
  STEEDOS_INITIAL_PACKAGES: process.env.STEEDOS_INITIAL_PACKAGES
45
40
  },
46
41
 
@@ -153,6 +148,7 @@ module.exports = {
153
148
  if(packageConfig.static){
154
149
  packageConfig = Object.assign({}, packageConfig, this.getStaticPackageInfo(packageConfig, packageConfig.name))
155
150
  }
151
+ await checkDependencies(util.getPackageRelativePath(process.cwd(), packageConfig.path))
156
152
  const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
157
153
  await ctx.broker.call(`@steedos/service-packages.install`, {
158
154
  serviceInfo: Object.assign({}, packageConfig, {
@@ -164,68 +160,6 @@ module.exports = {
164
160
  return {}
165
161
  }
166
162
  },
167
- getCloudSaasPurchasedPackages:{
168
- async handler(ctx) {
169
- try {
170
-
171
- const user = ctx.meta.user;
172
- if(!user.is_space_admin){
173
- throw new Error('not permission!');
174
- }
175
- return await this.getCloudSaasPurchasedPackages();
176
- } catch (error) {
177
- throw new MoleculerError(error.message, 500, "ERR_SOMETHING");
178
- }
179
- }
180
- },
181
- installPurchasedPackages: {
182
- async handler(ctx){
183
- const installErrors = {};
184
- const installPackages = [];
185
- try {
186
- const user = ctx.meta.user;
187
- if(!user.is_space_admin){
188
- throw new Error('not permission!');
189
- }
190
- try {
191
- await this.loginSteedosRegistry();
192
- console.info(`login steedos registry success`);
193
- } catch (error) {
194
- // console.error(`login steedos registry fail: `, error.message);
195
- }
196
- const settings = this.settings;
197
- const syncCloudPackages = settings.STEEDOS_CLOUD_SYNC_PACKAGES;
198
- let result = null;
199
- if(syncCloudPackages){
200
- result = await this.getCloudSaasPurchasedPackages();
201
- }
202
- if(result){
203
- for (const _package of result.packages) {
204
- try {
205
- const { name, version, label, description } = _package
206
- let enable = true; //安装已购买的软件包时先默认启用
207
- //TODO 处理 registry_url
208
- // 安装最新版
209
- const packageInfo = await this.installPackage(name, null, label, description, enable, ctx.broker);
210
- installPackages.push(packageInfo)
211
- } catch (error) {
212
- if(error.stderr){
213
- installErrors[_package.name] = error.stderr
214
- }else{
215
- installErrors[_package.name] = error.message
216
- }
217
- }
218
- }
219
- }
220
- return {
221
- installPackages: installPackages,
222
- installErrors: installErrors
223
- }
224
- } catch (error) {
225
- throw new MoleculerError(error.message, 500, "ERR_SOMETHING");
226
- }
227
- }
228
- },
229
163
  getPackageVersions: {
230
164
  async handler(ctx) {
231
165
  const { module } = ctx.params
@@ -245,15 +179,9 @@ module.exports = {
245
179
  if(!user.is_space_admin){
246
180
  throw new Error('not permission!');
247
181
  }
248
- try {
249
- await this.loginSteedosRegistry();
250
- console.info(`login steedos registry success`);
251
- } catch (error) {
252
- // console.error(`login steedos registry fail: `, error.message);
253
- }
254
- let { module, version, url, auth, registry_url } = ctx.params
182
+ let { module, version, url, auth, registry_url, fromClient = false } = ctx.params
255
183
  const enable = true;
256
- return await this.installPackageFromUrl(module, version, url, auth, enable, registry_url, ctx.broker)
184
+ return await this.installPackageFromUrl(module, version, url, auth, enable, registry_url, ctx.broker, {fromClient})
257
185
  } catch (error) {
258
186
  let errorInfo = error.message || '';
259
187
  if (error.stderr) {
@@ -301,47 +229,6 @@ module.exports = {
301
229
  installPackage: {
302
230
  async handler(module, version, label, description, enable, broker) {
303
231
  return await loader.installPackage(broker, {module, version, label, description, enable})
304
- }
305
- },
306
- getCloudSaasPurchasedPackages:{
307
- async handler() {
308
- const settings = this.settings;
309
- const apiKey = settings.STEEDOS_CLOUD_API_KEY || process.env.STEEDOS_CLOUD_API_KEY
310
- const spaceId = settings.STEEDOS_CLOUD_SPACE_ID || process.env.STEEDOS_CLOUD_SPACE_ID
311
- const url = settings.STEEDOS_CLOUD_URL
312
-
313
- if(!apiKey || !spaceId || !url){
314
- throw new Error(`请配置STEEDOS_CLOUD参数`);
315
- }
316
- const headers = Object.assign({}, {'Content-Type': 'application/json'}, { [HEADER_AUTH]: `${AUTH_TYPE} apikey,${apiKey}`});
317
- const response = await fetch(`${url}/api/shop/product_subscriptions/steedos-packages`, {
318
- method: 'GET', headers: headers
319
- });
320
-
321
- const result = await response.json();
322
-
323
- if(result.status === 'error'){
324
- throw new Error(`${url}: ${result.message}`)
325
- }
326
-
327
- const packages = [];
328
-
329
- _.each(result.data, (item)=>{
330
- if(item.product){
331
- let isExist = _.find(packages, (_package)=>{
332
- return _package.name === item.product.sku
333
- })
334
- if(!isExist){
335
- packages.push({
336
- name: item.product.sku,
337
- version: null, //始终安装latest最新版
338
- label: item.product.name,
339
- description: item.product.description || ''
340
- })
341
- }
342
- }
343
- })
344
- return { packages : packages}
345
232
  }
346
233
  },
347
234
  getPackageVersions: {
@@ -379,7 +266,7 @@ module.exports = {
379
266
  }
380
267
  },
381
268
  installPackageFromUrl: {
382
- async handler(module, version, url, auth, enable, registry_url, broker) {
269
+ async handler(module, version, url, auth, enable, registry_url, broker, {fromClient}) {
383
270
  if(!module || !_.isString(module) || !module.trim()){
384
271
  throw new Error(`无效的软件包名称`);
385
272
  } else {
@@ -400,32 +287,13 @@ module.exports = {
400
287
  }
401
288
  }
402
289
 
403
- const settings = this.settings;
404
- if (url && url.startsWith(settings.STEEDOS_CLOUD_URL + '/api/pkg/download')) {
405
- const apiKey = settings.STEEDOS_CLOUD_API_KEY || process.env.STEEDOS_CLOUD_API_KEY
406
- const spaceId = settings.STEEDOS_CLOUD_SPACE_ID || process.env.STEEDOS_CLOUD_SPACE_ID
407
- const cloudUrl = settings.STEEDOS_CLOUD_URL
408
-
409
- if (!apiKey || !spaceId || !cloudUrl) {
410
- throw new Error(`请配置STEEDOS_CLOUD参数`);
411
- }
412
- const headers = Object.assign({}, { 'Content-Type': 'application/json' }, { [HEADER_AUTH]: `${AUTH_TYPE} apikey,${apiKey}` });
413
- const response = await fetch(url, {
414
- method: 'POST', headers: headers, body: JSON.stringify({ _authToken: auth })
415
- });
416
-
417
- const result = await response.json();
418
-
419
- if (result.error) {
420
- throw new Error(`安装失败,软件包URL或认证信息错误`)
421
- }
422
- url = `${url}/${result.token}`
423
- console.log(`url`, url);
424
- }
425
290
  const packagePath = await registry.installModule(module, version, url, registry_url);
426
291
  const packageInfo = loader.getPackageInfo(null, packagePath);
427
292
  const packageName = packageInfo.name;
428
293
  if(enable){
294
+ if(fromClient){
295
+ await packages.checkDependencies(packagePath)
296
+ }
429
297
  await loader.loadPackage(packageName, packagePath);
430
298
  }else{
431
299
  enable = false;
@@ -477,40 +345,6 @@ module.exports = {
477
345
  return result.data;
478
346
  }
479
347
  },
480
- loginSteedosRegistry: {
481
- async handler() {
482
- const settings = this.settings;
483
- // 配置主控地址
484
- const consoleUrl = settings.STEEDOS_CLOUD_URL;
485
- if (!consoleUrl) {
486
- throw new Error('请配置主控地址');
487
- }
488
-
489
- // 初始化工作区数据
490
- // 获取环境变量中工作区信息
491
- const spaceId = settings.STEEDOS_CLOUD_SPACE_ID || process.env.STEEDOS_CLOUD_SPACE_ID;
492
- const apiKey = settings.STEEDOS_CLOUD_API_KEY || process.env.STEEDOS_CLOUD_API_KEY;
493
-
494
- if (!spaceId || !apiKey) {
495
- throw new Error('请配置环境变量STEEDOS_CLOUD_SPACE_ID和STEEDOS_CLOUD_API_KEY。');
496
- }
497
-
498
- const registryUrl = settings.STEEDOS_REGISTRY_URL
499
-
500
- // 调用接口获取初始化信息
501
- const { info, scopes } = await this.getSafeScopes(spaceId, apiKey, consoleUrl);
502
- const { adminPhone } = info;
503
- if (!adminPhone) {
504
- throw new Error('缺少工作区信息 工作区名称、管理员姓名、管理员手机号,请检查');
505
- }
506
- // let scope = '';
507
- // if (scopes && scopes.length > 0) {
508
- // scope = scopes[0];
509
- // }
510
- await login.loginToRegistry(adminPhone, apiKey, `${adminPhone}@steedos.com`, registryUrl, undefined);
511
- login.setYarnrcScopes(scopes, registryUrl);
512
- }
513
- },
514
348
  initialPackages: {
515
349
  async handler(){
516
350
  const settings = this.settings;
@@ -649,12 +483,6 @@ module.exports = {
649
483
  * Service started lifecycle event handler
650
484
  */
651
485
  async started() {
652
- try {
653
- await this.loginSteedosRegistry();
654
- console.info(`login steedos registry success`);
655
- } catch (error) {
656
- // console.error(`login steedos registry fail: `, error.message);
657
- }
658
486
 
659
487
  const PACKAGE_INSTALL_NODE = process.env.PACKAGE_INSTALL_NODE
660
488
  if(PACKAGE_INSTALL_NODE){
@@ -672,19 +500,6 @@ module.exports = {
672
500
  console.log(`started error`, error)
673
501
  }
674
502
 
675
- // 新版单包项目加载
676
- // try {
677
- // if(fs.existsSync(path.join(process.cwd(), 'package.service.js'))){
678
- // const packagePath = process.cwd();
679
- // if(fs.existsSync(packagePath)){
680
- // const packageInfo = require(path.join(packagePath, 'package.json'));
681
- // loader.appendToPackagesConfig(`${packageInfo.name}`, {version: packageInfo.version, description: packageInfo.description, local: true, path: util.getPackageRelativePath(process.cwd(), packagePath)});
682
- // }
683
- // }
684
- // } catch (error) {
685
- // console.log(`started error`, error)
686
- // }
687
-
688
503
  await metadata.uncompressPackages(process.cwd());
689
504
  const mPackages = metadata.getAllPackages(process.cwd());
690
505
  _.each(mPackages, (packagePath)=>{