@abtnode/core 1.16.52-beta-20251003-083412-fdfc4e36 → 1.16.52-beta-20251008-091027-c46c73e3
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/lib/api/team.js +593 -47
- package/lib/blocklet/downloader/blocklet-downloader.js +2 -2
- package/lib/blocklet/downloader/bundle-downloader.js +13 -38
- package/lib/blocklet/manager/disk.js +219 -89
- package/lib/blocklet/manager/ensure-blocklet-running.js +3 -2
- package/lib/blocklet/manager/helper/blue-green-get-componentids.js +59 -0
- package/lib/blocklet/manager/helper/blue-green-start-blocklet.js +301 -0
- package/lib/blocklet/manager/helper/blue-green-update-blocklet-status.js +18 -0
- package/lib/blocklet/manager/helper/blue-green-upgrade-blocklet.js +191 -0
- package/lib/blocklet/manager/helper/upgrade-components.js +2 -9
- package/lib/blocklet/migration-dist/migration.cjs +4 -1
- package/lib/blocklet/passport/index.js +8 -2
- package/lib/index.js +18 -0
- package/lib/monitor/blocklet-runtime-monitor.js +12 -7
- package/lib/states/audit-log.js +54 -2
- package/lib/states/blocklet.js +22 -6
- package/lib/states/index.js +3 -0
- package/lib/states/org.js +663 -0
- package/lib/team/manager.js +10 -3
- package/lib/util/blocklet.js +217 -137
- package/lib/util/docker/is-docker-only-single-instances.js +17 -0
- package/lib/util/org.js +99 -0
- package/lib/validators/org.js +19 -0
- package/package.json +27 -26
package/lib/util/org.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
const { ROLES, SERVER_ROLES } = require('@abtnode/constant');
|
|
2
|
+
const { getAppUrl } = require('@blocklet/meta/lib/util');
|
|
3
|
+
const { CustomError } = require('@blocklet/error');
|
|
4
|
+
const { joinURL, withQuery } = require('ufo');
|
|
5
|
+
const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
|
|
6
|
+
const get = require('lodash/get');
|
|
7
|
+
|
|
8
|
+
const { isAdminPath, getEndpoint } = require('./verify-access-key-user');
|
|
9
|
+
|
|
10
|
+
const MAX_PAGE_SIZE = 100;
|
|
11
|
+
|
|
12
|
+
const formatPaging = (paging) => {
|
|
13
|
+
const { pageSize = 20, page = 1 } = paging || {};
|
|
14
|
+
const newPageSize = Math.max(1, Math.min(MAX_PAGE_SIZE, parseInt(pageSize, 10)));
|
|
15
|
+
const newPage = Math.max(1, parseInt(page, 10));
|
|
16
|
+
return { pageSize: newPageSize, page: newPage };
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const isAdminUser = (user) => {
|
|
20
|
+
const { role = '' } = user || {};
|
|
21
|
+
if (!role) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return [ROLES.ADMIN, ROLES.OWNER, SERVER_ROLES.BLOCKLET_ADMIN, SERVER_ROLES.BLOCKLET_OWNER].includes(role);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const isOrgOwner = (user, org) => {
|
|
28
|
+
const { did } = user || {};
|
|
29
|
+
if (!org) {
|
|
30
|
+
throw new CustomError(403, 'Org not found');
|
|
31
|
+
}
|
|
32
|
+
return org.ownerDid === did;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const isAdmingPath = (context = {}) => {
|
|
36
|
+
try {
|
|
37
|
+
const pathname = getEndpoint(context);
|
|
38
|
+
return isAdminPath(pathname);
|
|
39
|
+
} catch (error) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const getOrgInviteLink = (inviteInfo, blocklet) => {
|
|
45
|
+
const { inviteId } = inviteInfo || {};
|
|
46
|
+
const appUrl = getAppUrl(blocklet);
|
|
47
|
+
if (!inviteId || !appUrl) {
|
|
48
|
+
throw new CustomError(500, 'Invitation link creation failed, please try again later');
|
|
49
|
+
}
|
|
50
|
+
return withQuery(joinURL(appUrl, WELLKNOWN_SERVICE_PATH_PREFIX, 'invite'), { inviteId });
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const createOrgValidators = (blocklet = {}) => {
|
|
54
|
+
function getOrgSettings() {
|
|
55
|
+
const org = get(blocklet, 'settings.org', { enabled: false, maxMemberPerOrg: 100, maxOrgPerUser: 10 });
|
|
56
|
+
return org || { enabled: false, maxMemberPerOrg: 100, maxOrgPerUser: 10 };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const org = getOrgSettings();
|
|
60
|
+
|
|
61
|
+
function verifyOrgEnabled() {
|
|
62
|
+
if (!org?.enabled) {
|
|
63
|
+
throw new CustomError(403, 'Org is not enabled');
|
|
64
|
+
}
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function veriftMaxMemberPerOrg(number) {
|
|
69
|
+
verifyOrgEnabled();
|
|
70
|
+
if (number >= org.maxMemberPerOrg) {
|
|
71
|
+
throw new CustomError(403, `The current org can invite up to ${org.maxMemberPerOrg} members`);
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function veriftMaxOrgPerUser(number) {
|
|
77
|
+
verifyOrgEnabled();
|
|
78
|
+
if (number >= org.maxOrgPerUser) {
|
|
79
|
+
throw new CustomError(403, `You can create up to ${org.maxOrgPerUser} orgs`);
|
|
80
|
+
}
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return {
|
|
85
|
+
verifyOrgEnabled,
|
|
86
|
+
veriftMaxMemberPerOrg,
|
|
87
|
+
veriftMaxOrgPerUser,
|
|
88
|
+
getOrgSettings,
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
module.exports = {
|
|
93
|
+
formatPaging,
|
|
94
|
+
isAdminUser,
|
|
95
|
+
isOrgOwner,
|
|
96
|
+
isAdmingPath,
|
|
97
|
+
getOrgInviteLink,
|
|
98
|
+
createOrgValidators,
|
|
99
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const { Joi } = require('@arcblock/validator');
|
|
2
|
+
|
|
3
|
+
const createOrgInputSchema = Joi.object({
|
|
4
|
+
name: Joi.string().required().trim().min(1).max(20),
|
|
5
|
+
description: Joi.string().optional().allow('').trim().min(1).max(255),
|
|
6
|
+
ownerDid: Joi.DID().optional().allow('').allow(null),
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 只允许更新 name 和 description
|
|
11
|
+
*/
|
|
12
|
+
const updateOrgInputSchema = Joi.object({
|
|
13
|
+
id: Joi.string().required(),
|
|
14
|
+
name: Joi.string().required().trim().min(1).max(20),
|
|
15
|
+
description: Joi.string().optional().allow('').trim().min(1).max(255),
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
exports.createOrgInputSchema = createOrgInputSchema;
|
|
19
|
+
exports.updateOrgInputSchema = updateOrgInputSchema;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.16.52-beta-
|
|
6
|
+
"version": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
7
7
|
"description": "",
|
|
8
8
|
"main": "lib/index.js",
|
|
9
9
|
"files": [
|
|
@@ -13,28 +13,29 @@
|
|
|
13
13
|
"lint": "eslint tests lib --ignore-pattern 'tests/assets/*'",
|
|
14
14
|
"lint:fix": "eslint --fix tests lib",
|
|
15
15
|
"test": "node tools/jest.js",
|
|
16
|
-
"test:disk": "
|
|
16
|
+
"test:disk": "CI=true npm run test tests/blocklet/manager/disk.spec.js",
|
|
17
|
+
"test:blue": "CI=true npm run test tests/blocklet/manager/disk-blue-green.spec.js",
|
|
17
18
|
"coverage": "npm run test -- --coverage"
|
|
18
19
|
},
|
|
19
20
|
"keywords": [],
|
|
20
21
|
"author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
|
|
21
22
|
"license": "Apache-2.0",
|
|
22
23
|
"dependencies": {
|
|
23
|
-
"@abtnode/analytics": "1.16.52-beta-
|
|
24
|
-
"@abtnode/auth": "1.16.52-beta-
|
|
25
|
-
"@abtnode/certificate-manager": "1.16.52-beta-
|
|
26
|
-
"@abtnode/constant": "1.16.52-beta-
|
|
27
|
-
"@abtnode/cron": "1.16.52-beta-
|
|
28
|
-
"@abtnode/db-cache": "1.16.52-beta-
|
|
29
|
-
"@abtnode/docker-utils": "1.16.52-beta-
|
|
30
|
-
"@abtnode/logger": "1.16.52-beta-
|
|
31
|
-
"@abtnode/models": "1.16.52-beta-
|
|
32
|
-
"@abtnode/queue": "1.16.52-beta-
|
|
33
|
-
"@abtnode/rbac": "1.16.52-beta-
|
|
34
|
-
"@abtnode/router-provider": "1.16.52-beta-
|
|
35
|
-
"@abtnode/static-server": "1.16.52-beta-
|
|
36
|
-
"@abtnode/timemachine": "1.16.52-beta-
|
|
37
|
-
"@abtnode/util": "1.16.52-beta-
|
|
24
|
+
"@abtnode/analytics": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
25
|
+
"@abtnode/auth": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
26
|
+
"@abtnode/certificate-manager": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
27
|
+
"@abtnode/constant": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
28
|
+
"@abtnode/cron": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
29
|
+
"@abtnode/db-cache": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
30
|
+
"@abtnode/docker-utils": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
31
|
+
"@abtnode/logger": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
32
|
+
"@abtnode/models": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
33
|
+
"@abtnode/queue": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
34
|
+
"@abtnode/rbac": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
35
|
+
"@abtnode/router-provider": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
36
|
+
"@abtnode/static-server": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
37
|
+
"@abtnode/timemachine": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
38
|
+
"@abtnode/util": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
38
39
|
"@aigne/aigne-hub": "^0.10.0",
|
|
39
40
|
"@arcblock/did": "1.25.6",
|
|
40
41
|
"@arcblock/did-connect-js": "1.25.6",
|
|
@@ -46,16 +47,16 @@
|
|
|
46
47
|
"@arcblock/pm2-events": "^0.0.5",
|
|
47
48
|
"@arcblock/validator": "1.25.6",
|
|
48
49
|
"@arcblock/vc": "1.25.6",
|
|
49
|
-
"@blocklet/constant": "1.16.52-beta-
|
|
50
|
+
"@blocklet/constant": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
50
51
|
"@blocklet/did-space-js": "^1.1.29",
|
|
51
|
-
"@blocklet/env": "1.16.52-beta-
|
|
52
|
+
"@blocklet/env": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
52
53
|
"@blocklet/error": "^0.2.5",
|
|
53
|
-
"@blocklet/meta": "1.16.52-beta-
|
|
54
|
-
"@blocklet/resolver": "1.16.52-beta-
|
|
55
|
-
"@blocklet/sdk": "1.16.52-beta-
|
|
56
|
-
"@blocklet/server-js": "1.16.52-beta-
|
|
57
|
-
"@blocklet/store": "1.16.52-beta-
|
|
58
|
-
"@blocklet/theme": "^3.1.
|
|
54
|
+
"@blocklet/meta": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
55
|
+
"@blocklet/resolver": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
56
|
+
"@blocklet/sdk": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
57
|
+
"@blocklet/server-js": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
58
|
+
"@blocklet/store": "1.16.52-beta-20251008-091027-c46c73e3",
|
|
59
|
+
"@blocklet/theme": "^3.1.45",
|
|
59
60
|
"@fidm/x509": "^1.2.1",
|
|
60
61
|
"@ocap/mcrypto": "1.25.6",
|
|
61
62
|
"@ocap/util": "1.25.6",
|
|
@@ -119,5 +120,5 @@
|
|
|
119
120
|
"jest": "^29.7.0",
|
|
120
121
|
"unzipper": "^0.10.11"
|
|
121
122
|
},
|
|
122
|
-
"gitHead": "
|
|
123
|
+
"gitHead": "2a8d239f019aece938d909a495ff1c54ad0e87a9"
|
|
123
124
|
}
|