@steedos/service-package-registry 2.5.14-beta.1 → 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
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/service-package-registry",
|
|
3
|
-
"version": "2.5.14-beta.
|
|
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.14-beta.
|
|
13
|
-
"@steedos/core": "2.5.14-beta.
|
|
14
|
-
"@steedos/metadata-core": "2.5.14-beta.
|
|
15
|
-
"@steedos/objectql": "2.5.14-beta.
|
|
16
|
-
"@steedos/service-package-loader": "2.5.14-beta.
|
|
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": "
|
|
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
|
-
|
|
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)=>{
|