@steedos/service-package-registry 3.0.0-beta.9 → 3.0.0-beta.92
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/loader.js +3 -3
- package/main/default/manager/packages.js +4 -2
- package/main/default/manager/registry.js +8 -1
- package/main/default/objects/steedos_packages/buttons/disable.button.js +51 -0
- package/main/default/objects/steedos_packages/buttons/disable.button.yml +4 -0
- package/main/default/objects/steedos_packages/buttons/edit_npmrc.button.js +8 -0
- package/main/default/objects/steedos_packages/buttons/edit_npmrc.button.yml +86 -0
- package/main/default/objects/steedos_packages/buttons/enable.button.js +52 -0
- package/main/default/objects/steedos_packages/buttons/enable.button.yml +4 -0
- package/main/default/objects/steedos_packages/buttons/installPackageFromUrl.button.js +8 -0
- package/main/default/objects/steedos_packages/buttons/installPackageFromUrl.button.yml +135 -0
- package/main/default/objects/steedos_packages/buttons/reload.button.js +34 -0
- package/main/default/objects/steedos_packages/buttons/reload.button.yml +4 -0
- package/main/default/objects/steedos_packages/buttons/uninstall.button.js +57 -0
- package/main/default/objects/steedos_packages/buttons/uninstall.button.yml +4 -0
- package/main/default/objects/steedos_packages/buttons/upgradePackage.button.js +22 -0
- package/main/default/objects/steedos_packages/buttons/upgradePackage.button.yml +147 -0
- package/main/default/objects/steedos_packages/fields/isUnmanaged.field.yml +4 -0
- package/main/default/objects/steedos_packages/listviews/all.listview.yml +1 -0
- package/main/default/pages/steedos_package_detail.page.amis.json +1 -30
- package/main/default/pages/steedos_packages_list.page.amis.json +3 -9
- package/main/default/routes/nodes.router.js +292 -0
- package/main/default/routes/registry.router.js +21 -0
- package/main/default/triggers/steedos_packages.trigger.js +7 -13
- package/package.json +6 -6
- package/project.package.service.js +35 -12
|
@@ -114,7 +114,7 @@ const loadPackages = async ()=>{
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
} catch (error) {
|
|
117
|
-
console.error(`start package ${packageName} error: ${error.message}`)
|
|
117
|
+
console.error(`start package ${packageName} error[117]: ${error.message}`)
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
}else if(package.local !== true){
|
|
@@ -132,7 +132,7 @@ const loadPackages = async ()=>{
|
|
|
132
132
|
const packageInfo = await loadPackage(packageName);
|
|
133
133
|
appendToPackagesConfig(packageInfo.name, {version: packageInfo.version, description: packageInfo.description, local: false});
|
|
134
134
|
} catch (error) {
|
|
135
|
-
console.error(`start package ${packageName} error: ${error.message}`)
|
|
135
|
+
console.error(`start package ${packageName} error[135]: ${error.message}`)
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
138
|
}else if(package.local === true && package.static != true){
|
|
@@ -147,7 +147,7 @@ const loadPackages = async ()=>{
|
|
|
147
147
|
appendToPackagesConfig(packageInfo.name, {version: packageInfo.version, description: packageInfo.description, local: true});
|
|
148
148
|
}
|
|
149
149
|
} catch (error) {
|
|
150
|
-
console.error(`start package ${packageName} error: ${error.message}`)
|
|
150
|
+
console.error(`start package ${packageName} error[150]: ${error.message}`)
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
}
|
|
@@ -71,6 +71,7 @@ const getAllPackages = async ()=>{
|
|
|
71
71
|
_package.instance_id = packageInfo.instanceID
|
|
72
72
|
_package.version = packageInfo.version
|
|
73
73
|
_package.homepage = packageInfo.homepage
|
|
74
|
+
_package.isUnmanaged = packageInfo.isUnmanaged
|
|
74
75
|
}else{
|
|
75
76
|
packages.push({
|
|
76
77
|
label: packageInfo.label || packageName,
|
|
@@ -84,7 +85,8 @@ const getAllPackages = async ()=>{
|
|
|
84
85
|
instance_id: packageInfo.instanceID,
|
|
85
86
|
status : 'enable',
|
|
86
87
|
version : packageInfo.version,
|
|
87
|
-
local: false
|
|
88
|
+
local: false,
|
|
89
|
+
isUnmanaged: packageInfo.isUnmanaged
|
|
88
90
|
})
|
|
89
91
|
}
|
|
90
92
|
})
|
|
@@ -129,7 +131,7 @@ const maintainSystemFiles = ()=>{
|
|
|
129
131
|
const getPackageVersions = async (packageName, options)=>{
|
|
130
132
|
//TODO 处理 registry_url
|
|
131
133
|
|
|
132
|
-
let registry_url = registryUrl(packageName.toLowerCase().split('/')[0]);
|
|
134
|
+
let registry_url = process.env.NPM_REGISTRY_URL || registryUrl(packageName.toLowerCase().split('/')[0]);
|
|
133
135
|
|
|
134
136
|
const result = await packageJson(packageName.toLowerCase(), {
|
|
135
137
|
allVersions: true,
|
|
@@ -282,10 +282,17 @@ async function yarnAddPackage(yarnPackage){
|
|
|
282
282
|
paths: [path.join(installDir, 'node_modules')]
|
|
283
283
|
}))
|
|
284
284
|
if(fs.existsSync(path.join(packagePath, 'package.service.js'))){
|
|
285
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, no-undef
|
|
286
|
+
const schema = require(path.join(packagePath, 'package.service.js'));
|
|
287
|
+
schema.settings.packageInfo = {
|
|
288
|
+
...schema.settings?.packageInfo,
|
|
289
|
+
...(schema.metadata && schema.metadata.$package ? schema.metadata.$package : {}),
|
|
290
|
+
}
|
|
285
291
|
steedosPackages.push({
|
|
286
292
|
name: parsed.name,
|
|
287
293
|
version: parsed.rawSpec,
|
|
288
|
-
path: packagePath
|
|
294
|
+
path: packagePath,
|
|
295
|
+
isUnmanaged: schema.settings.packageInfo.isUnmanaged
|
|
289
296
|
})
|
|
290
297
|
}
|
|
291
298
|
})
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
disable: function (object_name, record_id) {
|
|
3
|
+
Steedos.sobject(object_name).retrieve(record_id).then((record)=>{
|
|
4
|
+
if(!record){
|
|
5
|
+
return SteedosUI.notification.error({message: '未找到软件包'})
|
|
6
|
+
}
|
|
7
|
+
SteedosUI.Modal.confirm({
|
|
8
|
+
title: t('steedos_packages.disable.title'),
|
|
9
|
+
content: t('steedos_packages.disable.text') + ` ${record.name}?`,
|
|
10
|
+
okText: t('steedos_packages.disable.title'),
|
|
11
|
+
cancelText: t('Cancel'),
|
|
12
|
+
onOk: function(){
|
|
13
|
+
Steedos.authRequest(Steedos.absoluteUrl('/api/nodes/disable'), {type: 'post', async: false, data: JSON.stringify({
|
|
14
|
+
module: record.name,
|
|
15
|
+
nodeID: window.$("#steedos_package_main_node").val()
|
|
16
|
+
}),
|
|
17
|
+
success: function(data){
|
|
18
|
+
if(data.status == 1){
|
|
19
|
+
SteedosUI.notification.error({message: data.msg});
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
setTimeout(function(){
|
|
23
|
+
SteedosUI.notification.success({
|
|
24
|
+
message: t('steedos_packages.disable.toastr_success')
|
|
25
|
+
});
|
|
26
|
+
window.location.reload()
|
|
27
|
+
}, 1000 * 2)
|
|
28
|
+
},
|
|
29
|
+
error: function(XMLHttpRequest){
|
|
30
|
+
SteedosUI.notification.error({message: XMLHttpRequest.responseJSON.msg});
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
},
|
|
38
|
+
disableVisible: function (object_name, record_id, permission, data) {
|
|
39
|
+
if(Steedos.settings.public.enable_saas){
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
const record = data?.record || {};
|
|
43
|
+
if(record.isUnmanaged){
|
|
44
|
+
return false
|
|
45
|
+
}
|
|
46
|
+
if (record.status === 'enable') {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
return false
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
name: edit_npmrc
|
|
2
|
+
amis_schema: |-
|
|
3
|
+
{
|
|
4
|
+
"type": "service",
|
|
5
|
+
"body": [
|
|
6
|
+
{
|
|
7
|
+
"type": "button",
|
|
8
|
+
"label": "验证信息",
|
|
9
|
+
"id": "u:edit_npmrc",
|
|
10
|
+
"editorState": "default",
|
|
11
|
+
"onEvent": {
|
|
12
|
+
"click": {
|
|
13
|
+
"weight": 0,
|
|
14
|
+
"actions": [
|
|
15
|
+
{
|
|
16
|
+
"actionType": "dialog",
|
|
17
|
+
"dialog": {
|
|
18
|
+
"type": "dialog",
|
|
19
|
+
"title": "验证信息",
|
|
20
|
+
"body": [
|
|
21
|
+
{
|
|
22
|
+
"type": "form",
|
|
23
|
+
"title": "表单",
|
|
24
|
+
"body": [
|
|
25
|
+
{
|
|
26
|
+
"type": "editor",
|
|
27
|
+
"label": false,
|
|
28
|
+
"name": "npmrc",
|
|
29
|
+
"id": "u:71b44f532def",
|
|
30
|
+
"language": "bat"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"id": "u:c9b0e17d4ebd",
|
|
34
|
+
"initApi": {
|
|
35
|
+
"url": "/api/nodes/npmrc",
|
|
36
|
+
"method": "get"
|
|
37
|
+
},
|
|
38
|
+
"api": {
|
|
39
|
+
"url": "/api/nodes/npmrc",
|
|
40
|
+
"method": "post",
|
|
41
|
+
"requestAdaptor": "",
|
|
42
|
+
"adaptor": "",
|
|
43
|
+
"messages": {}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"type": "tpl",
|
|
48
|
+
"tpl": "<br/>"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"type": "markdown",
|
|
52
|
+
"value": "##### 验证信息说明(.npmrc):\r- `; 为范围包设置新的注册表`\r- `@myscope:registry=https://mycustomregistry.example.org`\r- `; 配置新注册表的认证信息(可选)`\r- `//mycustomregistry.example.org:_authToken=\"认证信息\"`"
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"showCloseButton": true,
|
|
56
|
+
"showErrorMsg": true,
|
|
57
|
+
"showLoading": true,
|
|
58
|
+
"className": "app-popover",
|
|
59
|
+
"id": "u:00682dd0eb74",
|
|
60
|
+
"closeOnEsc": false,
|
|
61
|
+
"size": "lg"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"regions": [
|
|
70
|
+
"body"
|
|
71
|
+
],
|
|
72
|
+
"data": {
|
|
73
|
+
"context": {},
|
|
74
|
+
"dataComponentId": "",
|
|
75
|
+
"record_id": "",
|
|
76
|
+
"record": {},
|
|
77
|
+
"permissions": {}
|
|
78
|
+
},
|
|
79
|
+
"bodyClassName": "p-0",
|
|
80
|
+
"id": "u:743d34f49376"
|
|
81
|
+
}
|
|
82
|
+
is_enable: true
|
|
83
|
+
label: 验证信息
|
|
84
|
+
'on': list
|
|
85
|
+
type: amis_button
|
|
86
|
+
visible: true
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
enable: function (object_name, record_id) {
|
|
3
|
+
Steedos.sobject(object_name).retrieve(record_id).then((record)=>{
|
|
4
|
+
if(!record){
|
|
5
|
+
return SteedosUI.notification.error({message: '未找到软件包'})
|
|
6
|
+
}
|
|
7
|
+
console.log('record.....',record)
|
|
8
|
+
|
|
9
|
+
SteedosUI.Modal.confirm({
|
|
10
|
+
title: '启用',
|
|
11
|
+
content: `确定要启用${record.name}?`,
|
|
12
|
+
okText: '启用',
|
|
13
|
+
cancelText: '取消',
|
|
14
|
+
onOk: function(){
|
|
15
|
+
Steedos.authRequest(Steedos.absoluteUrl('/api/nodes/enable'), {type: 'post', async: false, data: JSON.stringify({
|
|
16
|
+
module: record.name,
|
|
17
|
+
nodeID: window.$("#steedos_package_main_node").val()
|
|
18
|
+
}),
|
|
19
|
+
success: function(data){
|
|
20
|
+
if(data.status == 1){
|
|
21
|
+
SteedosUI.notification.error({message: data.msg});
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
setTimeout(function(){
|
|
25
|
+
SteedosUI.notification.success({
|
|
26
|
+
message: t('已启用')
|
|
27
|
+
});
|
|
28
|
+
window.location.reload()
|
|
29
|
+
}, 1000 * 2)
|
|
30
|
+
},
|
|
31
|
+
error: function(XMLHttpRequest){
|
|
32
|
+
SteedosUI.notification.error({message: XMLHttpRequest.responseJSON.msg});
|
|
33
|
+
}
|
|
34
|
+
})
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
})
|
|
38
|
+
},
|
|
39
|
+
enableVisible: function (object_name,record_id, permission, data) {
|
|
40
|
+
if(Steedos.settings.public.enable_saas){
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
const record = data?.record || {};
|
|
44
|
+
if(record.isUnmanaged){
|
|
45
|
+
return false
|
|
46
|
+
}
|
|
47
|
+
if(record.status !== 'enable'){
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
return false
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
name: installPackageFromUrl
|
|
2
|
+
label: 手动安装软件包
|
|
3
|
+
'on': list
|
|
4
|
+
#TODO: ${'steedos_packages.install.initialization_failure' | t} ,${'steedos_packages.install.installation_success' | t},${'steedos_packages.install.installation_failure' | t},等待amis合并分支,可用该代码,用于form组件的message属性
|
|
5
|
+
amis_schema: |-
|
|
6
|
+
{
|
|
7
|
+
"type": "service",
|
|
8
|
+
"body": [
|
|
9
|
+
{
|
|
10
|
+
"type": "button",
|
|
11
|
+
"label": "${'steedos_packages.install.install_package_from_url' | t}",
|
|
12
|
+
"id": "u:install_package_from_url",
|
|
13
|
+
"onEvent": {
|
|
14
|
+
"click": {
|
|
15
|
+
"actions": [
|
|
16
|
+
{
|
|
17
|
+
"actionType": "dialog",
|
|
18
|
+
"dialog": {
|
|
19
|
+
"type": "dialog",
|
|
20
|
+
"title": "${'steedos_packages.install.install_package_from_url' | t}",
|
|
21
|
+
"body": [
|
|
22
|
+
{
|
|
23
|
+
"type": "form",
|
|
24
|
+
"id": "u:add9d810b386",
|
|
25
|
+
"title": "",
|
|
26
|
+
"body": [
|
|
27
|
+
{
|
|
28
|
+
"label": "${'steedos_packages.install.package_name' | t}",
|
|
29
|
+
"type": "input-text",
|
|
30
|
+
"name": "package",
|
|
31
|
+
"id": "u:524cb8f8d888",
|
|
32
|
+
"required": true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"label": "镜像源",
|
|
36
|
+
"type": "input-text",
|
|
37
|
+
"name": "registry",
|
|
38
|
+
"id": "u:524cb8f8d666",
|
|
39
|
+
"required": false,
|
|
40
|
+
"options": [
|
|
41
|
+
{
|
|
42
|
+
"label": "淘宝源",
|
|
43
|
+
"value": "https://registry.npmmirror.com"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"label": "cnpm",
|
|
47
|
+
"value": "https://r.cnpmjs.org"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"label": "官方源",
|
|
51
|
+
"value": "https://registry.npmjs.org"
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"mode": "normal",
|
|
57
|
+
"api": {
|
|
58
|
+
"method": "post",
|
|
59
|
+
"url": "${context.rootUrl}/api/nodes/package/add",
|
|
60
|
+
"data": {
|
|
61
|
+
"&": "$$"
|
|
62
|
+
},
|
|
63
|
+
"dataType": "json",
|
|
64
|
+
"requestAdaptor": "api.data = {package: api.body.registry ? `${api.body.package} --registry ${api.body.registry}` : api.body.package};",
|
|
65
|
+
"headers": {
|
|
66
|
+
"Authorization": "Bearer ${context.tenantId},${context.authToken}"
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"messages": {
|
|
70
|
+
"fetchFailed": "初始化失败",
|
|
71
|
+
"saveSuccess": "安装成功",
|
|
72
|
+
"saveFailed": "安装失败"
|
|
73
|
+
},
|
|
74
|
+
"onEvent": {
|
|
75
|
+
"submitSucc": {
|
|
76
|
+
"weight": 0,
|
|
77
|
+
"actions": [
|
|
78
|
+
{
|
|
79
|
+
"actionType": "wait",
|
|
80
|
+
"args": {
|
|
81
|
+
"time": 3000
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"actionType": "broadcast",
|
|
86
|
+
"args": {
|
|
87
|
+
"eventName": "@data.changed.steedos_packages"
|
|
88
|
+
},
|
|
89
|
+
"data": {
|
|
90
|
+
"objectName": "steedos_packages",
|
|
91
|
+
"recordId": "install"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"type": "tpl",
|
|
100
|
+
"tpl": "<br/>"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"type": "markdown",
|
|
104
|
+
"value": "##### 您可以使用以下选项之一指定版本: \r- `package-name`安装包的“最新”版本。 \r- `package-name@1.2.3`从以下位置安装包的特定版本 注册表。 \r- `package-name@tag`安装特定的“标签”。(例如)beta、next、latest"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"type": "markdown",
|
|
108
|
+
"value": "##### 您还可以指定来自不同位置的包:\r- `package-name` 从 npm 注册表安装包 \r- `file:/path/to/local/folder`安装一个位于本地文件系统的包。这对于测试您尚未发布到注册表的软件包很有用。 \r- `file:/path/to/local/tarball.tgz`从 gzip 压缩的 tarball,可用于在发布包之前共享包。 \r- `link:/path/to/local/folder`安装指向软件包的符号链接:在本地文件系统上。适用于monorepo环境。 \r- `<git remote url>`从远程 Git 存储库安装包。 \r- `<git remote url>#<branch/commit/tag>`从远程安装软件包特定 git 分支、git commit 或 git 标签处的 git 存储库。 \r- `https://my-project.org/package.tgz` 从远程gzip压缩压缩包。"
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
"id": "u:efa30bace722",
|
|
112
|
+
"closeOnEsc": true,
|
|
113
|
+
"closeOnOutside": false,
|
|
114
|
+
"showCloseButton": true,
|
|
115
|
+
"size": "lg"
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"weight": 0
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
],
|
|
124
|
+
"regions": [
|
|
125
|
+
"body"
|
|
126
|
+
],
|
|
127
|
+
"data": {
|
|
128
|
+
|
|
129
|
+
},
|
|
130
|
+
"bodyClassName": "p-0",
|
|
131
|
+
"id": "u:43363bc48c62"
|
|
132
|
+
}
|
|
133
|
+
is_enable: true
|
|
134
|
+
type: amis_button
|
|
135
|
+
visible: true
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
reload: function (object_name, record_id, permission, data) {
|
|
3
|
+
SteedosUI.notification.info({message: t('steedos_packages.reload.toastr_info')})
|
|
4
|
+
const record = data?.record || {};
|
|
5
|
+
//TODO nodeID
|
|
6
|
+
Steedos.authRequest(Steedos.absoluteUrl('/api/nodes/reload'), {type: 'post', async: false, data: JSON.stringify({
|
|
7
|
+
module: record.name,
|
|
8
|
+
nodeID: record.node_id
|
|
9
|
+
}),
|
|
10
|
+
success: function(){
|
|
11
|
+
setTimeout(function(){
|
|
12
|
+
SteedosUI.notification.success({message: t('steedos_packages.reload.toastr_success')})
|
|
13
|
+
window.location.reload()
|
|
14
|
+
}, 1000 * 5)
|
|
15
|
+
},
|
|
16
|
+
error: function(XMLHttpRequest){
|
|
17
|
+
SteedosUI.notification.error({message: XMLHttpRequest.responseJSON.error})
|
|
18
|
+
}
|
|
19
|
+
})
|
|
20
|
+
},
|
|
21
|
+
reloadVisible: function (object_name,record_id, permission, data) {
|
|
22
|
+
if(Steedos.settings.public.enable_saas){
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const record = data?.record;
|
|
26
|
+
if(record.isUnmanaged){
|
|
27
|
+
return false
|
|
28
|
+
}
|
|
29
|
+
if(record.status === 'enable'){
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
return false
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
uninstall: function (object_name, record_id) {
|
|
3
|
+
Steedos.sobject(object_name).retrieve(record_id).then((record)=>{
|
|
4
|
+
if(!record){
|
|
5
|
+
return SteedosUI.notification.error({message: '未找到软件包'})
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
SteedosUI.Modal.confirm({
|
|
9
|
+
title: t('steedos_packages.uninstall.text') + ` ${record.name} 吗?` ,
|
|
10
|
+
content: `卸载后,该软件包中的所有组件将被永久删除且无法恢复`,
|
|
11
|
+
okText: t('steedos_packages.uninstall.title'),
|
|
12
|
+
cancelText: t('Cancel'),
|
|
13
|
+
width: 480,
|
|
14
|
+
onOk: function(){
|
|
15
|
+
return new Promise((resolve, reject) => {
|
|
16
|
+
Steedos.authRequest(Steedos.absoluteUrl('/api/nodes/uninstall'), {type: 'post', async: false, data: JSON.stringify({
|
|
17
|
+
module: record.name,
|
|
18
|
+
nodeID: window.$("#steedos_package_main_node").val()
|
|
19
|
+
}),
|
|
20
|
+
success: function(data){
|
|
21
|
+
if(data.status == 1){
|
|
22
|
+
SteedosUI.notification.error({message: data.msg});
|
|
23
|
+
resolve(data);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
setTimeout(function(){
|
|
27
|
+
SteedosUI.notification.success({
|
|
28
|
+
message: t('steedos_packages.uninstall.toastr_success')
|
|
29
|
+
});
|
|
30
|
+
resolve(data);
|
|
31
|
+
navigate("/app/admin/steedos_packages")
|
|
32
|
+
}, 1000 * 2)
|
|
33
|
+
},
|
|
34
|
+
error: function(XMLHttpRequest){
|
|
35
|
+
SteedosUI.notification.error({message: XMLHttpRequest.responseJSON.msg});
|
|
36
|
+
reject()
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
})
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
})
|
|
43
|
+
},
|
|
44
|
+
uninstallVisible: function (object_name,record_id, permission, data) {
|
|
45
|
+
if(Steedos.settings.public.enable_saas){
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
const record = data?.record;
|
|
49
|
+
if(record.local || record.static){
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if(record.status){
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
return false
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: baozhoutao@steedos.com
|
|
3
|
+
* @Date: 2022-12-09 18:23:36
|
|
4
|
+
* @LastEditors: baozhoutao@steedos.com
|
|
5
|
+
* @LastEditTime: 2025-03-07 11:59:52
|
|
6
|
+
* @Description:
|
|
7
|
+
*/
|
|
8
|
+
module.exports = {
|
|
9
|
+
upgradePackageVisible: function (object_name, record_id, permission, data) {
|
|
10
|
+
if(Steedos.settings.public.enable_saas){
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const record = data?.record;
|
|
14
|
+
if(record.isUnmanaged){
|
|
15
|
+
return false
|
|
16
|
+
}
|
|
17
|
+
if (record.status === 'enable' && !record.local && !record.static) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
return false
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
name: upgradePackage
|
|
2
|
+
is_enable: true
|
|
3
|
+
label: 升级
|
|
4
|
+
'on': record_only
|
|
5
|
+
amis_schema: |-
|
|
6
|
+
{
|
|
7
|
+
"type": "service",
|
|
8
|
+
"body": [
|
|
9
|
+
{
|
|
10
|
+
"type": "button",
|
|
11
|
+
"label": "${'steedos_packages.upgrade.upgrade_package' | t}",
|
|
12
|
+
"id": "u:upgrade_package",
|
|
13
|
+
"onEvent": {
|
|
14
|
+
"click": {
|
|
15
|
+
"actions": [
|
|
16
|
+
{
|
|
17
|
+
"actionType": "dialog",
|
|
18
|
+
"dialog": {
|
|
19
|
+
"type": "dialog",
|
|
20
|
+
"title": "${'steedos_packages.upgrade.select_version' | t}",
|
|
21
|
+
"body": [
|
|
22
|
+
{
|
|
23
|
+
"type": "form",
|
|
24
|
+
"body": [
|
|
25
|
+
{
|
|
26
|
+
"type": "picker",
|
|
27
|
+
"required": true,
|
|
28
|
+
"id": "u:ae8d73bea81b",
|
|
29
|
+
"label": false,
|
|
30
|
+
"name": "version",
|
|
31
|
+
"valueField": "version",
|
|
32
|
+
"options": [
|
|
33
|
+
],
|
|
34
|
+
"modalMode": "dialog",
|
|
35
|
+
"multiple": false,
|
|
36
|
+
"embed": true,
|
|
37
|
+
"source": {
|
|
38
|
+
"method": "get",
|
|
39
|
+
"url": "${context.rootUrl}/api/nodes/versions?module=${record.name}",
|
|
40
|
+
"requestAdaptor": "api.data={}; return api;",
|
|
41
|
+
"headers": {
|
|
42
|
+
"Authorization": "Bearer ${context.tenantId},${context.authToken}"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"pickerSchema": {
|
|
46
|
+
"mode": "table",
|
|
47
|
+
"id": "u:34518bacaba7",
|
|
48
|
+
"perPageAvailable": [
|
|
49
|
+
10
|
|
50
|
+
],
|
|
51
|
+
"messages": {
|
|
52
|
+
},
|
|
53
|
+
"filter": null,
|
|
54
|
+
"columns": [
|
|
55
|
+
{
|
|
56
|
+
"label": "${'steedos_packages.upgrade.version_number' | t}",
|
|
57
|
+
"name": "version",
|
|
58
|
+
"id": "u:b0e787352cf4",
|
|
59
|
+
"placeholder": "-"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"label": "${'steedos_packages.upgrade.label' | t}",
|
|
63
|
+
"name": "tag",
|
|
64
|
+
"id": "u:f17df7e102a2",
|
|
65
|
+
"placeholder": "-"
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"id": "u:14efe3589478",
|
|
72
|
+
"api": {
|
|
73
|
+
"method": "post",
|
|
74
|
+
"url": "${context.rootUrl}/api/nodes/upgrade",
|
|
75
|
+
"dataType": "json",
|
|
76
|
+
"requestAdaptor": "api.data = {module: api.body.record.name, version: api.body.version}",
|
|
77
|
+
"data": {
|
|
78
|
+
"&": "$$",
|
|
79
|
+
"context": "${context}",
|
|
80
|
+
"record": "${record}"
|
|
81
|
+
},
|
|
82
|
+
"headers": {
|
|
83
|
+
"Authorization": "Bearer ${context.tenantId},${context.authToken}"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"messages": {
|
|
87
|
+
"saveSuccess": "升级成功",
|
|
88
|
+
"saveFailed": "安装失败"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
"id": "u:c3960c3b1049",
|
|
93
|
+
"closeOnEsc": false,
|
|
94
|
+
"closeOnOutside": false,
|
|
95
|
+
"showCloseButton": true,
|
|
96
|
+
"data": {
|
|
97
|
+
"&": "$$",
|
|
98
|
+
"context": "${context}",
|
|
99
|
+
"record": "${record}"
|
|
100
|
+
},
|
|
101
|
+
"size": "md",
|
|
102
|
+
"actions": [
|
|
103
|
+
{
|
|
104
|
+
"type": "button",
|
|
105
|
+
"label": "${'steedos_packages.upgrade.cancel' | t}",
|
|
106
|
+
"onEvent": {
|
|
107
|
+
"click": {
|
|
108
|
+
"actions": [
|
|
109
|
+
{
|
|
110
|
+
"componentId": "",
|
|
111
|
+
"args": {
|
|
112
|
+
},
|
|
113
|
+
"actionType": "closeDialog"
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"id": "u:dbf7b7a9821c"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"type": "submit",
|
|
122
|
+
"label": "${'steedos_packages.upgrade.confirm' | t}",
|
|
123
|
+
"id": "u:0318127b7745",
|
|
124
|
+
"close": true,
|
|
125
|
+
"confirmText": "${'steedos_packages.upgrade.second_confirm' | t}",
|
|
126
|
+
"level": "primary"
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
],
|
|
132
|
+
"weight": 0
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
],
|
|
137
|
+
"regions": [
|
|
138
|
+
"body"
|
|
139
|
+
],
|
|
140
|
+
"data": {
|
|
141
|
+
|
|
142
|
+
},
|
|
143
|
+
"bodyClassName": "p-0",
|
|
144
|
+
"id": "u:721e4093f456"
|
|
145
|
+
}
|
|
146
|
+
type: amis_button
|
|
147
|
+
visible: true
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
"type": "tabs",
|
|
17
|
-
"className": "steedos-record-tabs bg-white p-4
|
|
17
|
+
"className": "steedos-record-tabs bg-white p-4 sm:m-4 sm:border sm:rounded",
|
|
18
18
|
"tabs": [
|
|
19
19
|
{
|
|
20
20
|
"title": "简介",
|
|
@@ -75,35 +75,6 @@
|
|
|
75
75
|
],
|
|
76
76
|
"className": "p-0",
|
|
77
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"
|
|
107
78
|
}
|
|
108
79
|
],
|
|
109
80
|
"id": "u:148cf8e840eb"
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"actions": [
|
|
33
33
|
{
|
|
34
34
|
"label": "${uiSchema.actions.enable.label}",
|
|
35
|
-
"disabledOn": "${status === 'enable' || window:Steedos.settings.public.enable_saas}",
|
|
35
|
+
"disabledOn": "${status === 'enable' || window:Steedos.settings.public.enable_saas || isUnmanaged === true}",
|
|
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' || window:Steedos.settings.public.enable_saas}",
|
|
51
|
+
"disabledOn": "${status !== 'enable' || window:Steedos.settings.public.enable_saas || isUnmanaged === true}",
|
|
52
52
|
"onEvent": {
|
|
53
53
|
"click": {
|
|
54
54
|
"actions": [
|
|
@@ -94,13 +94,7 @@
|
|
|
94
94
|
"padding-top": "0.5rem",
|
|
95
95
|
"padding-bottom": "0.5rem",
|
|
96
96
|
"padding-left": "1rem",
|
|
97
|
-
"padding-right": "1rem"
|
|
98
|
-
"--tw-bg-opacity": "1",
|
|
99
|
-
"background-color": "rgb(243 244 246 / var(--tw-bg-opacity))",
|
|
100
|
-
"--tw-border-opacity": "1",
|
|
101
|
-
"border-color": "rgb(209 213 219 / var(--tw-border-opacity))",
|
|
102
|
-
"border-style": "solid",
|
|
103
|
-
"border-bottom-width": "1px"
|
|
97
|
+
"padding-right": "1rem"
|
|
104
98
|
},
|
|
105
99
|
".antd-Service.steedos-object-table .antd-Crud .antd-Cards .antd-Cards-body": {
|
|
106
100
|
"margin": "0.25rem"
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
const express = require('express');
|
|
2
|
+
const router = express.Router();
|
|
3
|
+
const auth = require('@steedos/auth');
|
|
4
|
+
const objectql = require('@steedos/objectql');
|
|
5
|
+
let schema = objectql.getSteedosSchema();
|
|
6
|
+
const validator = require('validator');
|
|
7
|
+
|
|
8
|
+
const disabledChangePackageWithSaas = async (req, res, next) => {
|
|
9
|
+
if (validator.toBoolean(process.env.STEEDOS_TENANT_ENABLE_SAAS || 'false', true) != true) {
|
|
10
|
+
next();
|
|
11
|
+
}else {
|
|
12
|
+
// 禁止操作packages
|
|
13
|
+
res.status(500).send({ status: 'error', message: 'No permission' });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
router.get('/api/nodes/install', disabledChangePackageWithSaas, auth.requireAuthentication, async function (req, res) {
|
|
18
|
+
const userSession = req.user;
|
|
19
|
+
const isSpaceAdmin = userSession.is_space_admin;
|
|
20
|
+
const body = JSON.parse(decodeURIComponent(Buffer.from(req.query.data, "base64").toString('utf8')));
|
|
21
|
+
if(!isSpaceAdmin){
|
|
22
|
+
return res.status(401).send({ message: 'No permission' });
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const { module, version, label, description, nodeID} = body || {};
|
|
26
|
+
let broker = schema.broker;
|
|
27
|
+
const result = await broker.call(`@steedos/service-project.installPackage`, {
|
|
28
|
+
module, version, label, description
|
|
29
|
+
},{
|
|
30
|
+
nodeID: nodeID
|
|
31
|
+
})
|
|
32
|
+
res.redirect(302, `/app/admin/steedos_packages/grid/all`);
|
|
33
|
+
// res.status(200).send(result); //TODO 完善返回信息
|
|
34
|
+
} catch (error) {
|
|
35
|
+
console.error(error);
|
|
36
|
+
res.status(500).send(error.message);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
router.post('/api/nodes/uninstall', disabledChangePackageWithSaas, auth.requireAuthentication, async function (req, res) {
|
|
41
|
+
const userSession = req.user;
|
|
42
|
+
const isSpaceAdmin = userSession.is_space_admin;
|
|
43
|
+
const body = req.body;
|
|
44
|
+
if(!isSpaceAdmin){
|
|
45
|
+
return res.status(401).send({ message: 'No permission' });
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const { module, nodeID} = body || {};
|
|
49
|
+
let broker = schema.broker;
|
|
50
|
+
const result = await broker.call(`@steedos/service-project.uninstallPackage`, {
|
|
51
|
+
module
|
|
52
|
+
},{
|
|
53
|
+
nodeID: nodeID,
|
|
54
|
+
meta: {
|
|
55
|
+
user: userSession
|
|
56
|
+
}
|
|
57
|
+
})
|
|
58
|
+
res.status(200).send(result); //TODO 完善返回信息
|
|
59
|
+
} catch (error) {
|
|
60
|
+
console.error(error);
|
|
61
|
+
res.status(500).send(error.message);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
router.post('/api/nodes/reload', disabledChangePackageWithSaas, auth.requireAuthentication, async function (req, res) {
|
|
66
|
+
const userSession = req.user;
|
|
67
|
+
const isSpaceAdmin = userSession.is_space_admin;
|
|
68
|
+
const body = req.body;
|
|
69
|
+
if(!isSpaceAdmin){
|
|
70
|
+
return res.status(401).send({ message: 'No permission' });
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const { module, nodeID} = body || {};
|
|
74
|
+
let broker = schema.broker;
|
|
75
|
+
const result = await broker.call(`@steedos/service-project.reloadPackage`, {
|
|
76
|
+
module
|
|
77
|
+
},{
|
|
78
|
+
nodeID: nodeID
|
|
79
|
+
})
|
|
80
|
+
res.status(200).send(result);
|
|
81
|
+
} catch (error) {
|
|
82
|
+
console.error(error);
|
|
83
|
+
res.status(500).send(error.message);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
router.post('/api/nodes/disable', disabledChangePackageWithSaas, auth.requireAuthentication, async function (req, res) {
|
|
88
|
+
const userSession = req.user;
|
|
89
|
+
const isSpaceAdmin = userSession.is_space_admin;
|
|
90
|
+
const body = req.body;
|
|
91
|
+
if(!isSpaceAdmin){
|
|
92
|
+
return res.status(401).send({ message: 'No permission' });
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
const { module, nodeID} = body || {};
|
|
96
|
+
let broker = schema.broker;
|
|
97
|
+
const result = await broker.call(`@steedos/service-project.disablePackage`, {
|
|
98
|
+
module
|
|
99
|
+
},{
|
|
100
|
+
nodeID: nodeID
|
|
101
|
+
})
|
|
102
|
+
res.status(200).send(result);
|
|
103
|
+
} catch (error) {
|
|
104
|
+
console.error(error);
|
|
105
|
+
res.status(500).send(error.message);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
router.post('/api/nodes/enable', disabledChangePackageWithSaas, auth.requireAuthentication, async function (req, res) {
|
|
110
|
+
const userSession = req.user;
|
|
111
|
+
const isSpaceAdmin = userSession.is_space_admin;
|
|
112
|
+
const body = req.body;
|
|
113
|
+
if(!isSpaceAdmin){
|
|
114
|
+
return res.status(401).send({ message: 'No permission' });
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
const { module, nodeID} = body || {};
|
|
118
|
+
let broker = schema.broker;
|
|
119
|
+
const result = await broker.call(`@steedos/service-project.enablePackage`, {
|
|
120
|
+
module
|
|
121
|
+
},{
|
|
122
|
+
nodeID: nodeID
|
|
123
|
+
})
|
|
124
|
+
res.status(200).send(result);
|
|
125
|
+
} catch (error) {
|
|
126
|
+
console.error(error);
|
|
127
|
+
res.status(200).send({
|
|
128
|
+
"status": 1,
|
|
129
|
+
"msg": error.message
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
// res.status(500).send(error.message);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
router.get('/api/nodes/versions', disabledChangePackageWithSaas, auth.requireAuthentication, async function (req, res) {
|
|
136
|
+
const userSession = req.user;
|
|
137
|
+
const isSpaceAdmin = userSession.is_space_admin;
|
|
138
|
+
// console.log(`req.query`, req.query)
|
|
139
|
+
const body = req.query;
|
|
140
|
+
const { module } = body || {};
|
|
141
|
+
if(!module){
|
|
142
|
+
return res.status(500).send({ message: 'Not find module' });
|
|
143
|
+
}
|
|
144
|
+
if(!isSpaceAdmin){
|
|
145
|
+
return res.status(401).send({ message: 'No permission' });
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
|
|
149
|
+
let broker = schema.broker;
|
|
150
|
+
const result = await broker.call(`@steedos/service-project.getPackageVersions`, {
|
|
151
|
+
module
|
|
152
|
+
})
|
|
153
|
+
res.status(200).send(result); //TODO 完善返回信息
|
|
154
|
+
} catch (error) {
|
|
155
|
+
console.error(error);
|
|
156
|
+
res.status(500).send(error.message);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
router.post('/api/nodes/upgrade', disabledChangePackageWithSaas, auth.requireAuthentication, async function (req, res) {
|
|
161
|
+
const userSession = req.user;
|
|
162
|
+
const isSpaceAdmin = userSession.is_space_admin;
|
|
163
|
+
const body = req.body;
|
|
164
|
+
if(!isSpaceAdmin){
|
|
165
|
+
return res.status(401).send({ message: 'No permission' });
|
|
166
|
+
}
|
|
167
|
+
try {
|
|
168
|
+
const { module, version} = body || {};
|
|
169
|
+
let broker = schema.broker;
|
|
170
|
+
const result = await broker.call(`@steedos/service-project.upgradePackage`, {
|
|
171
|
+
module, version
|
|
172
|
+
})
|
|
173
|
+
res.status(200).send(result);
|
|
174
|
+
} catch (error) {
|
|
175
|
+
console.error(error);
|
|
176
|
+
res.status(500).send(error.message);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
router.get('/api/nodes/cloud/saas/packages/purchased', disabledChangePackageWithSaas, auth.requireAuthentication, async function (req, res) {
|
|
181
|
+
const userSession = req.user;
|
|
182
|
+
try {
|
|
183
|
+
let broker = schema.broker;
|
|
184
|
+
const result = await broker.call(`@steedos/service-project.getCloudSaasPurchasedPackages`, {
|
|
185
|
+
}, {
|
|
186
|
+
meta: {
|
|
187
|
+
user: userSession
|
|
188
|
+
}
|
|
189
|
+
})
|
|
190
|
+
res.status(200).send(result);
|
|
191
|
+
} catch (error) {
|
|
192
|
+
console.error(error);
|
|
193
|
+
res.status(500).send(error.message);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
router.post('/api/nodes/cloud/saas/packages/purchased', disabledChangePackageWithSaas, auth.requireAuthentication, async function(req, res){
|
|
198
|
+
const userSession = req.user;
|
|
199
|
+
try {
|
|
200
|
+
let broker = schema.broker;
|
|
201
|
+
const result = await broker.call(`@steedos/service-project.installPurchasedPackages`, {}, {
|
|
202
|
+
meta: {
|
|
203
|
+
user: userSession
|
|
204
|
+
}
|
|
205
|
+
})
|
|
206
|
+
res.status(200).send(result);
|
|
207
|
+
} catch (error) {
|
|
208
|
+
console.error(error);
|
|
209
|
+
res.status(500).send(error.message);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
router.post('/api/nodes/cloud/saas/packages/url', disabledChangePackageWithSaas, auth.requireAuthentication, async function(req, res){
|
|
214
|
+
const userSession = req.user;
|
|
215
|
+
try {
|
|
216
|
+
let broker = schema.broker;
|
|
217
|
+
const { module, version, url, auth, registry_url } = req.body;
|
|
218
|
+
const result = await broker.call(`@steedos/service-project.installPackageFromUrl`, {module, version, url, auth, registry_url, fromClient: true}, {
|
|
219
|
+
meta: {
|
|
220
|
+
user: userSession
|
|
221
|
+
}
|
|
222
|
+
})
|
|
223
|
+
res.status(200).send(result);
|
|
224
|
+
} catch (error) {
|
|
225
|
+
console.error(error);
|
|
226
|
+
res.status(500).send(error.message);
|
|
227
|
+
}
|
|
228
|
+
})
|
|
229
|
+
|
|
230
|
+
router.get('/api/nodes/npmrc', disabledChangePackageWithSaas, auth.requireAuthentication, async function(req, res){
|
|
231
|
+
const userSession = req.user;
|
|
232
|
+
const isSpaceAdmin = userSession.is_space_admin;
|
|
233
|
+
if(!isSpaceAdmin){
|
|
234
|
+
return res.status(401).send({ message: 'No permission' });
|
|
235
|
+
}
|
|
236
|
+
try {
|
|
237
|
+
let broker = schema.broker;
|
|
238
|
+
const result = await broker.call(`@steedos/service-project.getNpmrc`, {}, {
|
|
239
|
+
meta: {
|
|
240
|
+
user: userSession
|
|
241
|
+
}
|
|
242
|
+
})
|
|
243
|
+
res.status(200).send({data: {npmrc: result}});
|
|
244
|
+
} catch (error) {
|
|
245
|
+
console.error(error);
|
|
246
|
+
res.status(500).send(error.message);
|
|
247
|
+
}
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
router.post('/api/nodes/npmrc', disabledChangePackageWithSaas, auth.requireAuthentication, async function(req, res){
|
|
251
|
+
const userSession = req.user;
|
|
252
|
+
const isSpaceAdmin = userSession.is_space_admin;
|
|
253
|
+
if(!isSpaceAdmin){
|
|
254
|
+
return res.status(401).send({ message: 'No permission' });
|
|
255
|
+
}
|
|
256
|
+
try {
|
|
257
|
+
let broker = schema.broker;
|
|
258
|
+
const { npmrc } = req.body;
|
|
259
|
+
const result = await broker.call(`@steedos/service-project.setNpmrc`, {npmrc}, {
|
|
260
|
+
meta: {
|
|
261
|
+
user: userSession
|
|
262
|
+
}
|
|
263
|
+
})
|
|
264
|
+
res.status(200).send(result);
|
|
265
|
+
} catch (error) {
|
|
266
|
+
console.error(error);
|
|
267
|
+
res.status(500).send(error.message);
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
router.post('/api/nodes/package/add', disabledChangePackageWithSaas, auth.requireAuthentication, async function(req, res){
|
|
272
|
+
const userSession = req.user;
|
|
273
|
+
const isSpaceAdmin = userSession.is_space_admin;
|
|
274
|
+
if(!isSpaceAdmin){
|
|
275
|
+
return res.status(401).send({ message: 'No permission' });
|
|
276
|
+
}
|
|
277
|
+
try {
|
|
278
|
+
let broker = schema.broker;
|
|
279
|
+
const { package: yarnPackage } = req.body;
|
|
280
|
+
const result = await broker.call(`@steedos/service-project.yarnAddPackage`, {yarnPackage, enable: true}, {
|
|
281
|
+
meta: {
|
|
282
|
+
user: userSession
|
|
283
|
+
}
|
|
284
|
+
})
|
|
285
|
+
res.status(200).send(result);
|
|
286
|
+
} catch (error) {
|
|
287
|
+
console.error(error.message);
|
|
288
|
+
res.status(500).send("安装软件包异常, 请检查参数或网络");
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
exports.default = router;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: baozhoutao@steedos.com
|
|
3
|
+
* @Date: 2022-11-18 16:32:30
|
|
4
|
+
* @LastEditors: baozhoutao@steedos.com
|
|
5
|
+
* @LastEditTime: 2025-01-21 17:28:27
|
|
6
|
+
* @Description:
|
|
7
|
+
*/
|
|
8
|
+
const express = require('express');
|
|
9
|
+
const router = express.Router();
|
|
10
|
+
const auth = require("@steedos/auth");
|
|
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", auth.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;
|
|
@@ -18,13 +18,9 @@ module.exports = {
|
|
|
18
18
|
const { spaceId } = this;
|
|
19
19
|
let dataList = await packages.getAllPackages();
|
|
20
20
|
if (!_.isEmpty(dataList)) {
|
|
21
|
-
const cloneValues =
|
|
21
|
+
const cloneValues = [];
|
|
22
22
|
dataList.forEach((doc) => {
|
|
23
|
-
|
|
24
|
-
return value.name === doc.name
|
|
25
|
-
})) {
|
|
26
|
-
cloneValues.push(doc);
|
|
27
|
-
}
|
|
23
|
+
cloneValues.push(doc)
|
|
28
24
|
})
|
|
29
25
|
const records = objectql.getSteedosSchema().metadataDriver.find(cloneValues, this.query, spaceId);
|
|
30
26
|
if (records.length > 0) {
|
|
@@ -42,12 +38,10 @@ module.exports = {
|
|
|
42
38
|
this.data.values = result.length;
|
|
43
39
|
},
|
|
44
40
|
afterFindOne: async function(){
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
});
|
|
51
|
-
}
|
|
41
|
+
const all = await packages.getAllPackages();
|
|
42
|
+
const id = this.id;
|
|
43
|
+
this.data.values = _.find(all, function(item){
|
|
44
|
+
return item._id === id
|
|
45
|
+
});
|
|
52
46
|
}
|
|
53
47
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/service-package-registry",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.92",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "package.service.js",
|
|
6
6
|
"scripts": {
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
"author": "",
|
|
10
10
|
"license": "ISC",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@steedos/auth": "3.0.0-beta.
|
|
13
|
-
"@steedos/metadata-core": "3.0.0-beta.
|
|
14
|
-
"@steedos/objectql": "3.0.0-beta.
|
|
15
|
-
"@steedos/service-package-loader": "3.0.0-beta.
|
|
12
|
+
"@steedos/auth": "3.0.0-beta.92",
|
|
13
|
+
"@steedos/metadata-core": "3.0.0-beta.92",
|
|
14
|
+
"@steedos/objectql": "3.0.0-beta.92",
|
|
15
|
+
"@steedos/service-package-loader": "3.0.0-beta.92",
|
|
16
16
|
"clone": "^2.1.2",
|
|
17
17
|
"fs-extra": "8.1.0",
|
|
18
18
|
"i18next": "20.3.2",
|
|
@@ -31,5 +31,5 @@
|
|
|
31
31
|
"publishConfig": {
|
|
32
32
|
"access": "public"
|
|
33
33
|
},
|
|
34
|
-
"gitHead": "
|
|
34
|
+
"gitHead": "16a684ff645d0a9b745e4b49309f2c63d6a41395"
|
|
35
35
|
}
|
|
@@ -76,6 +76,11 @@ module.exports = {
|
|
|
76
76
|
uninstallPackage:{
|
|
77
77
|
async handler(ctx) {
|
|
78
78
|
const { module } = ctx.params
|
|
79
|
+
const packages = loader.loadPackagesConfig();
|
|
80
|
+
let packageConfig = _.find(packages, (_p, pname) => {
|
|
81
|
+
_p.name = pname;
|
|
82
|
+
return pname === module;
|
|
83
|
+
})
|
|
79
84
|
await loader.removePackage(module);
|
|
80
85
|
await registry.uninstallModule(module)
|
|
81
86
|
await ctx.broker.call(`@steedos/service-packages.uninstall`, {
|
|
@@ -85,6 +90,17 @@ module.exports = {
|
|
|
85
90
|
instanceID: ctx.broker.instanceID,
|
|
86
91
|
}
|
|
87
92
|
})
|
|
93
|
+
if(packageConfig?.isUnmanaged){
|
|
94
|
+
await ctx.broker.call(`~packages-@steedos/metadata-api.remove`, {
|
|
95
|
+
name: module
|
|
96
|
+
}, {
|
|
97
|
+
timeout: 0,
|
|
98
|
+
meta: {
|
|
99
|
+
user: ctx.meta.user
|
|
100
|
+
}
|
|
101
|
+
})
|
|
102
|
+
}
|
|
103
|
+
|
|
88
104
|
return {};
|
|
89
105
|
}
|
|
90
106
|
},
|
|
@@ -250,8 +266,8 @@ module.exports = {
|
|
|
250
266
|
},
|
|
251
267
|
yarnAddPackage: {
|
|
252
268
|
async handler(ctx) {
|
|
253
|
-
const { yarnPackage } = ctx.params;
|
|
254
|
-
return await this.yarnAddPackage(yarnPackage);
|
|
269
|
+
const { yarnPackage, enable = false } = ctx.params;
|
|
270
|
+
return await this.yarnAddPackage(yarnPackage, enable);
|
|
255
271
|
}
|
|
256
272
|
}
|
|
257
273
|
},
|
|
@@ -460,11 +476,7 @@ module.exports = {
|
|
|
460
476
|
throw new Error(`not support ${parsed.type}`);
|
|
461
477
|
}
|
|
462
478
|
if(parsed.type === 'file' || parsed.type === 'directory'){
|
|
463
|
-
|
|
464
|
-
for(const pInfo of pInfos){
|
|
465
|
-
await this.broker.call('@steedos/service-project.enablePackage', {module: pInfo.name})
|
|
466
|
-
}
|
|
467
|
-
|
|
479
|
+
await this.yarnAddPackage(packageName, false, true)
|
|
468
480
|
}else{
|
|
469
481
|
if(installProps.url){
|
|
470
482
|
//module, version, url, auth, enable, registry_url, broker
|
|
@@ -476,6 +488,7 @@ module.exports = {
|
|
|
476
488
|
}
|
|
477
489
|
|
|
478
490
|
} catch (error) {
|
|
491
|
+
console.error(error)
|
|
479
492
|
this.broker.logger.error(`initialPackages: ${packageName}. ${error.message}`);
|
|
480
493
|
}
|
|
481
494
|
}
|
|
@@ -557,7 +570,8 @@ module.exports = {
|
|
|
557
570
|
description: _packageInfo.description,
|
|
558
571
|
metadata: metadata,
|
|
559
572
|
static: _packageInfo.static,
|
|
560
|
-
homepage: _packageInfo.homepage
|
|
573
|
+
homepage: _packageInfo.homepage,
|
|
574
|
+
isUnmanaged: _packageInfo.isUnmanaged
|
|
561
575
|
}
|
|
562
576
|
})
|
|
563
577
|
}
|
|
@@ -565,28 +579,37 @@ module.exports = {
|
|
|
565
579
|
}
|
|
566
580
|
},
|
|
567
581
|
yarnAddPackage: {
|
|
568
|
-
async handler(yarnPackage) {
|
|
582
|
+
async handler(yarnPackage, enable=false, configEnable = false) {
|
|
569
583
|
const packages = await registry.yarnAddPackage(yarnPackage);
|
|
570
584
|
for (const packageInfo of packages) {
|
|
571
585
|
const packagePath = packageInfo.path;
|
|
586
|
+
if(packageInfo.isUnmanaged){
|
|
587
|
+
enable = true;
|
|
588
|
+
}
|
|
572
589
|
loader.appendToPackagesConfig(packageInfo.name, {
|
|
573
590
|
version: packageInfo.version,
|
|
574
591
|
path: util.getPackageRelativePath(process.cwd(), packagePath),
|
|
575
|
-
enable:
|
|
592
|
+
enable: configEnable || enable,
|
|
593
|
+
isUnmanaged: packageInfo.isUnmanaged || false
|
|
576
594
|
});
|
|
595
|
+
if(enable){
|
|
596
|
+
await this.broker.call('@steedos/service-project.enablePackage', {module: packageInfo.name})
|
|
597
|
+
}
|
|
598
|
+
|
|
577
599
|
const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
|
|
578
600
|
const packageYmlData = loader.getPackageYmlData(packagePath);
|
|
579
601
|
await this.broker.call(`@steedos/service-packages.install`, {
|
|
580
602
|
serviceInfo: Object.assign({}, {
|
|
581
603
|
version: packageInfo.version,
|
|
582
|
-
path: packageInfo.path
|
|
604
|
+
path: packageInfo.path,
|
|
605
|
+
isUnmanaged: packageInfo.isUnmanaged || false
|
|
583
606
|
}, {
|
|
584
607
|
packageYmlData: packageYmlData,
|
|
585
608
|
name: packageInfo.name,
|
|
586
609
|
enable: false,
|
|
587
610
|
nodeID: broker.nodeID,
|
|
588
611
|
instanceID: broker.instanceID,
|
|
589
|
-
metadata: metadata
|
|
612
|
+
metadata: metadata,
|
|
590
613
|
})
|
|
591
614
|
})
|
|
592
615
|
}
|