@steedos/service-package-registry 2.5.18-beta.2 → 2.5.18-beta.4

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.
@@ -10,6 +10,21 @@ const packagesFilePath = path.join(userDir, 'steedos-packages.yml');
10
10
  const metadataApi = require('@steedos/metadata-api');
11
11
  const util = require('./util');
12
12
  const metaDataCore = require('@steedos/metadata-core');
13
+ const npmRCFilePath = path.join(userDir, '.npmrc')
14
+
15
+ // 读取.steedos下的.npmrc文件内容
16
+ const getNpmrc = ()=>{
17
+ let npmrc = "";
18
+ if(fs.existsSync(npmRCFilePath)){
19
+ npmrc = fs.readFileSync(npmRCFilePath, 'utf8')
20
+ }
21
+ return npmrc;
22
+ }
23
+
24
+ // 写入.steedos下的.npmrc文件内容
25
+ const setNpmrc = (data)=>{
26
+ fs.writeFileSync(npmRCFilePath, data);
27
+ }
13
28
 
14
29
  const getPackageYmlData = (packagePath)=>{
15
30
  let packageYmlData = {};
@@ -85,6 +100,8 @@ const appendToPackagesConfig = (packageName, options, actionName)=>{
85
100
  }
86
101
 
87
102
  const loadPackages = async ()=>{
103
+ let schema = objectql.getSteedosSchema();
104
+ let broker = schema.broker;
88
105
  const packages = loadPackagesConfig();
89
106
  for (const packageName in packages) {
90
107
  const package = packages[packageName]
@@ -94,10 +111,12 @@ const loadPackages = async ()=>{
94
111
  const packagePath = package.path || path.dirname(require.resolve(`${packageName}/package.json`))
95
112
  if(packagePath){
96
113
  const packageInfo = await loadPackage(packageName, packagePath);
97
- appendToPackagesConfig(packageInfo.name, {version: packageInfo.version, description: packageInfo.description, local: true});
114
+ if(packageInfo){
115
+ appendToPackagesConfig(packageInfo.name, {version: packageInfo.version, description: packageInfo.description, local: true});
116
+ }
98
117
  }
99
118
  } catch (error) {
100
- console.error(error)
119
+ broker.logger.error(`start package ${packageName} error: ${error.message}`)
101
120
  }
102
121
 
103
122
  }else if(package.local !== true){
@@ -115,7 +134,7 @@ const loadPackages = async ()=>{
115
134
  const packageInfo = await loadPackage(packageName);
116
135
  appendToPackagesConfig(packageInfo.name, {version: packageInfo.version, description: packageInfo.description, local: false});
117
136
  } catch (error) {
118
- console.error(error)
137
+ broker.logger.error(`start package ${packageName} error: ${error.message}`)
119
138
  }
120
139
  }
121
140
  }else if(package.local === true && package.static != true){
@@ -124,9 +143,13 @@ const loadPackages = async ()=>{
124
143
  packagePath = path.resolve(process.cwd(), packagePath)
125
144
  }
126
145
  if(packagePath){
127
- const packageInfo = await loadPackage(packageName, packagePath);
128
- if(packageInfo){
129
- appendToPackagesConfig(packageInfo.name, {version: packageInfo.version, description: packageInfo.description, local: true});
146
+ try {
147
+ const packageInfo = await loadPackage(packageName, packagePath);
148
+ if(packageInfo){
149
+ appendToPackagesConfig(packageInfo.name, {version: packageInfo.version, description: packageInfo.description, local: true});
150
+ }
151
+ } catch (error) {
152
+ broker.logger.error(`start package ${packageName} error: ${error.message}`)
130
153
  }
131
154
  }
132
155
  }
@@ -217,7 +240,7 @@ const loadDependency = async (mainPackageInfo = {}, dependencyName, dependencyVe
217
240
  }
218
241
 
219
242
  const loadPackage = async (packageName, packagePath)=>{
220
- try {
243
+ // try {
221
244
  if(!packagePath){
222
245
  packagePath = path.dirname(require.resolve(`${packageName}/package.json`, {
223
246
  paths: [path.join(userDir, 'node_modules')]
@@ -231,19 +254,28 @@ const loadPackage = async (packageName, packagePath)=>{
231
254
  return ;
232
255
  }
233
256
  const packageInfo = require(path.join(packagePath, 'package.json'));
257
+ const packageYml = getPackageYmlData(packagePath);
258
+
259
+ if(packageYml && packageYml.license && _.isArray(packageYml.license) && packageYml.license.length > 0){
260
+ const has = await broker.call('@steedos/service-license.checkProducts', {keys: packageYml.license});
261
+ if(!has){
262
+ throw new Error(`Software package 「${packageName}」 requires 「${packageYml.license.join(',')}」 license.`)
263
+ }
264
+ }
265
+
234
266
  await destroyExistThePackageService(packageInfo);
235
267
  await steedos.loadPackage(packagePath);
236
- const packageConfig = getPackageConfig(packageName);
237
- if(packageInfo.dependencies){
238
- for (const dependencyName in packageInfo.dependencies) {
239
- const dependencyVersion = packageInfo.dependencies[dependencyName];
240
- await loadDependency(packageConfig, dependencyName, dependencyVersion);
241
- }
242
- }
268
+ // const packageConfig = getPackageConfig(packageName);
269
+ // if(packageInfo.dependencies){
270
+ // for (const dependencyName in packageInfo.dependencies) {
271
+ // const dependencyVersion = packageInfo.dependencies[dependencyName];
272
+ // await loadDependency(packageConfig, dependencyName, dependencyVersion);
273
+ // }
274
+ // }
243
275
  return Object.assign({packagePath: packagePath}, packageInfo);
244
- } catch (error) {
245
- console.error(packageName, packagePath, error)
246
- }
276
+ // } catch (error) {
277
+ // console.error(packageName, packagePath, error)
278
+ // }
247
279
  }
248
280
 
249
281
  const disablePackage = async (packageName)=>{
@@ -288,6 +320,7 @@ const removePackageConfig = (packageName)=>{
288
320
  const getPackageConfig = (packageName)=>{
289
321
  const packages = loadPackagesConfig();
290
322
  return _.find(packages, (info, name)=>{
323
+ info.name = name;
291
324
  return packageName == name
292
325
  });
293
326
  }
@@ -405,5 +438,8 @@ module.exports = {
405
438
  getPackageInfo,
406
439
  getPackageMetadata,
407
440
  installPackage,
408
- getPackageYmlData
441
+ getPackageYmlData,
442
+ getNpmrc,
443
+ setNpmrc,
444
+ getPackageConfig
409
445
  }
@@ -186,9 +186,11 @@ const scanPackageMetadatas = async (packagePath) => {
186
186
  return packageMetadatas;
187
187
  }
188
188
 
189
- const checkDependencies = async (packagePath)=>{
190
- const packageServiceConfig = require(path.join(packagePath, 'package.service.js'));
191
- const dependencies = (packageServiceConfig && packageServiceConfig.dependencies) || [];
189
+ const checkDependencies = async (packagePath, dependencies)=>{
190
+ if(!dependencies){
191
+ const packageServiceConfig = require(path.join(packagePath, 'package.service.js'));
192
+ dependencies = (packageServiceConfig && packageServiceConfig.dependencies) || [];
193
+ }
192
194
  for(const item of dependencies){
193
195
  const hasService = await objectql.getSteedosSchema().broker.registry.hasService(item);
194
196
  if(!hasService){
@@ -14,6 +14,8 @@ let installDenyList = [];
14
14
  let installAllAllowed = true;
15
15
  let installVersionRestricted = false;
16
16
  var activePromise = Promise.resolve();
17
+ const _ = require('lodash');
18
+ const npa = require("npm-package-arg");
17
19
 
18
20
  log.init({});
19
21
 
@@ -268,6 +270,27 @@ async function installModule(module, version, url, registry_url) {
268
270
  return activePromise;
269
271
  }
270
272
 
273
+ async function yarnAddPackage(yarnPackage){
274
+ var installDir = settings.userDir || ".";
275
+ var yarnArgs = ['add', '-E', ...yarnPackage.split(' '), '--json'];
276
+ const data = await exec.run(yarnCommand, yarnArgs, {cwd: installDir}, true);
277
+ const formatData = JSON.parse(_.last(_.compact(data.stdout.split('\n'))))
278
+ // 解析 yarn add 返回的结果
279
+ const steedosPackages = [];
280
+ _.each(formatData.data.trees, (module)=>{
281
+ const parsed = npa(module.name);
282
+ const packagePath = path.dirname(require.resolve(`${parsed.name}/package.json`, {
283
+ paths: [path.join(installDir, 'node_modules')]
284
+ }))
285
+ steedosPackages.push({
286
+ name: parsed.name,
287
+ version: parsed.rawSpec,
288
+ path: packagePath
289
+ })
290
+ })
291
+ return steedosPackages;
292
+ }
293
+
271
294
 
272
295
  async function uninstallModule(module){
273
296
  if (Buffer.isBuffer(module)) {
@@ -326,5 +349,6 @@ const isPackageUrl = (url)=>{
326
349
  module.exports = {
327
350
  installModule,
328
351
  uninstallModule,
329
- isPackageUrl
352
+ isPackageUrl,
353
+ yarnAddPackage
330
354
  }
@@ -0,0 +1,4 @@
1
+ name: dependencies
2
+ type: select
3
+ multiple: true
4
+ label: 依赖项
@@ -68,12 +68,42 @@
68
68
  "mode": "read",
69
69
  "className": "mb-4",
70
70
  "excludedFields": [
71
- "metadata"
71
+ "metadata",
72
+ "dependencies"
72
73
  ]
73
74
  }
74
75
  ],
75
76
  "className": "p-0",
76
77
  "id": "u:5d4e7e3f6ecc"
78
+ },
79
+ {
80
+ "title": "依赖服务",
81
+ "body": [
82
+ {
83
+ "type": "steedos-object-form",
84
+ "label": "对象表单",
85
+ "objectApiName": "${objectName}",
86
+ "recordId": "${recordId}",
87
+ "appId": "${appId}",
88
+ "id": "u:fec578db3278",
89
+ "mode": "read",
90
+ "className": "mb-4",
91
+ "fields": [
92
+ "dependencies"
93
+ ],
94
+ "fieldsExtend": {
95
+ "dependencies": {
96
+ "label": false,
97
+ "amis": {
98
+ "type": "tpl",
99
+ "tpl": "${dependencies | join: }"
100
+ }
101
+ }
102
+ }
103
+ }
104
+ ],
105
+ "className": "p-0",
106
+ "id": "u:5d4e7e3f6ecc"
77
107
  }
78
108
  ],
79
109
  "id": "u:148cf8e840eb"
@@ -26,13 +26,13 @@
26
26
  "body": [
27
27
  {
28
28
  "type": "tpl",
29
- "tpl": "<div class='antd-Card-heading bg-white'><span class='antd-Card-avtar pull-left thumb-md m-r slds-icon slds-icon_container slds-icon-${iconCategory}-${iconName} ${display === \"split\" && 'hidden'}'><img class='antd-Card-img'src='${icon}' /></span><div class='antd-Card-meta'><div class='antd-Card-title'><span class='antd-TplField'><span>${label}</span></span></div><div class='antd-Card-subTitle'><span class='antd-TplField'><span>${description}</span></span></div><div class='antd-Card-desc'><span class='antd-TplField'><span><span class='bg-green-300 rounded-full px-2 py-0.5 mt-2 inline-block'>${_display.status}</span><span class='text-gray-600 px-2 py-0.5 mt-2 inline-block float-right'>${version}</span></span></span></div></div></div>"
29
+ "tpl": "<div class='antd-Card-heading bg-white'><span class='antd-Card-avtar pull-left thumb-md m-r slds-icon slds-icon_container slds-icon-${iconCategory}-${iconName} ${display === \"split\" && 'hidden'}'><img class='antd-Card-img'src='${icon}' /></span><div class='antd-Card-meta'><div class='antd-Card-title'><span class='antd-TplField' title='${label}'><span>${label}</span></span></div><div class='antd-Card-subTitle'><span class='antd-TplField' title='${description}'><span>${description}</span></span></div><div class='antd-Card-desc'><span class='antd-TplField'><span><span class='bg-${status === 'enable' ? 'green': 'gray'}-300 rounded-full px-2 py-0.5 mt-2 inline-block'>${_display.status}</span><span class='text-gray-600 px-2 py-0.5 mt-2 inline-block float-right'>${version}</span></span></span></div></div></div>"
30
30
  }
31
31
  ],
32
32
  "actions": [
33
33
  {
34
34
  "label": "${uiSchema.actions.enable.label}",
35
- "disabledOn": "${status === 'enable'}",
35
+ "disabledOn": "${status === 'enable' || window:Meteor.settings.public.enable_saas}",
36
36
  "className": "mr-4",
37
37
  "onEvent": {
38
38
  "click": {
@@ -48,7 +48,7 @@
48
48
  },
49
49
  {
50
50
  "label": "${uiSchema.actions.disable.label}",
51
- "disabledOn": "${status !== 'enable'}",
51
+ "disabledOn": "${status !== 'enable' || window:Meteor.settings.public.enable_saas}",
52
52
  "onEvent": {
53
53
  "click": {
54
54
  "actions": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/service-package-registry",
3
- "version": "2.5.18-beta.2",
3
+ "version": "2.5.18-beta.4",
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.18-beta.2",
13
- "@steedos/core": "2.5.18-beta.2",
14
- "@steedos/metadata-core": "2.5.18-beta.2",
15
- "@steedos/objectql": "2.5.18-beta.2",
16
- "@steedos/service-package-loader": "2.5.18-beta.2",
12
+ "@steedos/auth": "2.5.18-beta.4",
13
+ "@steedos/core": "2.5.18-beta.4",
14
+ "@steedos/metadata-core": "2.5.18-beta.4",
15
+ "@steedos/objectql": "2.5.18-beta.4",
16
+ "@steedos/service-package-loader": "2.5.18-beta.4",
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": "0f48957d39df17d699a5177f473401362a9916bf"
34
+ "gitHead": "dbed817b5b9689fd0ee6bbfb8e9911a18a3c8403"
35
35
  }
@@ -155,13 +155,24 @@ module.exports = {
155
155
  enablePackage:{
156
156
  async handler(ctx) {
157
157
  const { module } = ctx.params
158
- let packageConfig = await loader.enablePackage(module);
158
+ let packageConfig = await loader.getPackageConfig(module);
159
+
159
160
  if(packageConfig.static){
160
161
  packageConfig = Object.assign({}, packageConfig, this.getStaticPackageInfo(packageConfig, packageConfig.name))
161
162
  }
162
- await packages.checkDependencies(path.resolve(packageConfig.path))
163
- const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
163
+
164
164
  const packageYmlData = loader.getPackageYmlData(packageConfig.path);
165
+
166
+ if(packageYmlData.dependencies){
167
+ await packages.checkDependencies(path.resolve(packageConfig.path), packageYmlData.dependencies || [])
168
+ }
169
+ packageConfig = await loader.enablePackage(module);
170
+
171
+ if(packageConfig.static){
172
+ packageConfig = Object.assign({}, packageConfig, this.getStaticPackageInfo(packageConfig, packageConfig.name))
173
+ }
174
+
175
+ const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
165
176
  await ctx.broker.call(`@steedos/service-packages.install`, {
166
177
  serviceInfo: Object.assign({}, packageConfig, {
167
178
  packageYmlData,
@@ -225,8 +236,24 @@ module.exports = {
225
236
  async handler(ctx) {
226
237
  return await this.addPackages(ctx);
227
238
  }
239
+ },
240
+ getNpmrc: {
241
+ async handler(ctx){
242
+ return await loader.getNpmrc()
243
+ }
244
+ },
245
+ setNpmrc: {
246
+ async handler(ctx){
247
+ const { npmrc } = ctx.params;
248
+ return await loader.setNpmrc(npmrc)
249
+ }
250
+ },
251
+ yarnAddPackage: {
252
+ async handler(ctx) {
253
+ const { yarnPackage } = ctx.params;
254
+ return await this.yarnAddPackage(yarnPackage);
255
+ }
228
256
  }
229
-
230
257
  },
231
258
 
232
259
  /**
@@ -478,7 +505,7 @@ module.exports = {
478
505
  instanceID: this.broker.instanceID,
479
506
  path: _packageInfo.path,
480
507
  local: _packageInfo.local,
481
- enable: _packageInfo.enable,
508
+ enable: false,
482
509
  version: _packageInfo.version,
483
510
  description: _packageInfo.description,
484
511
  metadata: metadata,
@@ -489,6 +516,34 @@ module.exports = {
489
516
  }
490
517
  }
491
518
  }
519
+ },
520
+ yarnAddPackage: {
521
+ async handler(yarnPackage) {
522
+ const packages = await registry.yarnAddPackage(yarnPackage);
523
+ for (const packageInfo of packages) {
524
+ const packagePath = packageInfo.path;
525
+ loader.appendToPackagesConfig(packageInfo.name, {
526
+ version: packageInfo.version,
527
+ path: util.getPackageRelativePath(process.cwd(), packagePath),
528
+ enable: false
529
+ });
530
+ const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
531
+ const packageYmlData = loader.getPackageYmlData(packagePath);
532
+ await this.broker.call(`@steedos/service-packages.install`, {
533
+ serviceInfo: Object.assign({}, {
534
+ version: packageInfo.version,
535
+ path: packageInfo.path
536
+ }, {
537
+ packageYmlData: packageYmlData,
538
+ name: packageInfo.name,
539
+ enable: false,
540
+ nodeID: broker.nodeID,
541
+ instanceID: broker.instanceID,
542
+ metadata: metadata
543
+ })
544
+ })
545
+ }
546
+ }
492
547
  }
493
548
  },
494
549
 
@@ -1,166 +0,0 @@
1
- const express = require('express');
2
- const router = express.Router();
3
- const core = require('@steedos/core');
4
- const registry = require('../manager/registry');
5
- const loader = require('../manager/loader');
6
- const objectql = require('@steedos/objectql');
7
- let schema = objectql.getSteedosSchema();
8
- router.get('/api/nodes/install', core.requireAuthentication, async function (req, res) {
9
- const userSession = req.user;
10
- const isSpaceAdmin = userSession.is_space_admin;
11
- const body = JSON.parse(decodeURIComponent(Buffer.from(req.query.data, "base64").toString('utf8')));
12
- if(!isSpaceAdmin){
13
- return res.status(401).send({ message: 'No permission' });
14
- }
15
- try {
16
- const { module, version, label, description, nodeID} = body || {};
17
- let broker = schema.broker;
18
- const result = await broker.call(`@steedos/service-project.installPackage`, {
19
- module, version, label, description
20
- },{
21
- nodeID: nodeID
22
- })
23
- res.redirect(302, `/app/admin/steedos_packages/grid/all`);
24
- // res.status(200).send(result); //TODO 完善返回信息
25
- } catch (error) {
26
- console.error(error);
27
- res.status(500).send({error: error.message});
28
- }
29
- });
30
-
31
- router.post('/api/nodes/uninstall', core.requireAuthentication, async function (req, res) {
32
- const userSession = req.user;
33
- const isSpaceAdmin = userSession.is_space_admin;
34
- const body = req.body;
35
- if(!isSpaceAdmin){
36
- return res.status(401).send({ message: 'No permission' });
37
- }
38
- try {
39
- await loader.removePackage(body.module);
40
- await registry.uninstallModule(body.module)
41
- const { module, nodeID} = body || {};
42
- let broker = schema.broker;
43
- const result = await broker.call(`@steedos/service-project.uninstallPackage`, {
44
- module
45
- },{
46
- nodeID: nodeID
47
- })
48
- res.status(200).send(result); //TODO 完善返回信息
49
- } catch (error) {
50
- console.error(error);
51
- res.status(500).send({error: error.message});
52
- }
53
- });
54
-
55
- router.post('/api/nodes/reload', core.requireAuthentication, async function (req, res) {
56
- const userSession = req.user;
57
- const isSpaceAdmin = userSession.is_space_admin;
58
- const body = req.body;
59
- if(!isSpaceAdmin){
60
- return res.status(401).send({ message: 'No permission' });
61
- }
62
- try {
63
- const { module, nodeID} = body || {};
64
- let broker = schema.broker;
65
- const result = await broker.call(`@steedos/service-project.reloadPackage`, {
66
- module
67
- },{
68
- nodeID: nodeID
69
- })
70
- res.status(200).send(result);
71
- } catch (error) {
72
- console.error(error);
73
- res.status(500).send({error: error.message});
74
- }
75
- });
76
-
77
- router.post('/api/nodes/disable', core.requireAuthentication, async function (req, res) {
78
- const userSession = req.user;
79
- const isSpaceAdmin = userSession.is_space_admin;
80
- const body = req.body;
81
- if(!isSpaceAdmin){
82
- return res.status(401).send({ message: 'No permission' });
83
- }
84
- try {
85
- const { module, nodeID} = body || {};
86
- let broker = schema.broker;
87
- const result = await broker.call(`@steedos/service-project.disablePackage`, {
88
- module
89
- },{
90
- nodeID: nodeID
91
- })
92
- res.status(200).send(result);
93
- } catch (error) {
94
- console.error(error);
95
- res.status(500).send({error: error.message});
96
- }
97
- });
98
-
99
- router.post('/api/nodes/enable', core.requireAuthentication, async function (req, res) {
100
- const userSession = req.user;
101
- const isSpaceAdmin = userSession.is_space_admin;
102
- const body = req.body;
103
- if(!isSpaceAdmin){
104
- return res.status(401).send({ message: 'No permission' });
105
- }
106
- try {
107
- const { module, nodeID} = body || {};
108
- let broker = schema.broker;
109
- const result = await broker.call(`@steedos/service-project.enablePackage`, {
110
- module
111
- },{
112
- nodeID: nodeID
113
- })
114
- res.status(200).send(result);
115
- } catch (error) {
116
- console.error(error);
117
- res.status(500).send({error: error.message});
118
- }
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(`@steedos/service-project.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(`@steedos/service-project.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
-
165
-
166
- exports.default = router;
@@ -1,21 +0,0 @@
1
- /*
2
- * @Author: baozhoutao@steedos.com
3
- * @Date: 2022-11-17 16:29:17
4
- * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2022-11-28 18:01:04
6
- * @Description:
7
- */
8
- const express = require('express');
9
- const router = express.Router();
10
- const core = require("@steedos/core");
11
-
12
- let STEEDOS_REGISTRY_URL = process.env.STEEDOS_REGISTRY_URL ? process.env.STEEDOS_REGISTRY_URL : 'https://registry.steedos.cn/';
13
-
14
- router.get("/api/nodes/registry", core.requireAuthentication, async function (req, res) {
15
- res.status(200).send([
16
- { label: "https://registry.npmjs.org/", value: "https://registry.npmjs.org/" },
17
- { label: "https://registry.npm.taobao.org/", value: "https://registry.npm.taobao.org/" },
18
- { label: STEEDOS_REGISTRY_URL, value: STEEDOS_REGISTRY_URL },
19
- ]);
20
- });
21
- exports.default = router;