@abtnode/core 1.16.47-beta-20250724-080141-d80ab374 → 1.16.47-beta-20250729-045152-0bde0f98
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/blocklet/manager/disk.js +6 -1
- package/lib/blocklet/manager/helper/install-component-from-url.js +2 -1
- package/lib/blocklet/migration-dist/migration.cjs +1 -1
- package/lib/event/util.js +6 -4
- package/lib/states/access-key.js +32 -8
- package/lib/states/notification.js +14 -1
- package/lib/util/aigne-verify.js +5 -4
- package/lib/util/check-dns.js +11 -33
- package/package.json +27 -27
|
@@ -2918,6 +2918,7 @@ class DiskBlockletManager extends BaseBlockletManager {
|
|
|
2918
2918
|
key: '',
|
|
2919
2919
|
accessKeyId: '',
|
|
2920
2920
|
secretAccessKey: '',
|
|
2921
|
+
validationResult: '',
|
|
2921
2922
|
},
|
|
2922
2923
|
});
|
|
2923
2924
|
const newState = await this.getBlocklet(did);
|
|
@@ -2938,10 +2939,14 @@ class DiskBlockletManager extends BaseBlockletManager {
|
|
|
2938
2939
|
throw new CustomError(400, 'blocklet did invalid, no blocklet found');
|
|
2939
2940
|
}
|
|
2940
2941
|
const aigne = get(blocklet, 'settings.aigne', {});
|
|
2941
|
-
const verified = await verifyAigneConfig(aigne,
|
|
2942
|
+
const verified = await verifyAigneConfig(aigne, blocklet);
|
|
2942
2943
|
if (!verified.valid) {
|
|
2944
|
+
await states.blockletExtras.setSettings(did, {
|
|
2945
|
+
aigne: { ...aigne, validationResult: verified?.error || 'failed' },
|
|
2946
|
+
});
|
|
2943
2947
|
throw new CustomError(500, verified.error);
|
|
2944
2948
|
}
|
|
2949
|
+
await states.blockletExtras.setSettings(did, { aigne: { ...aigne, validationResult: 'success' } });
|
|
2945
2950
|
} catch (error) {
|
|
2946
2951
|
logger.error('verify aigne connection error', { did, error });
|
|
2947
2952
|
throw error;
|
|
@@ -158,6 +158,7 @@ const installComponentFromUrl = async ({
|
|
|
158
158
|
await validateBlocklet(newBlocklet);
|
|
159
159
|
|
|
160
160
|
manager.emit(BlockletEvents.statusChange, newBlocklet);
|
|
161
|
+
const shouldCleanUploadFile = isUploadFile && url.includes(process.env.ABT_NODE_DATA_DIR);
|
|
161
162
|
|
|
162
163
|
const downloadParams = {
|
|
163
164
|
oldBlocklet: { ...oldBlocklet },
|
|
@@ -166,7 +167,7 @@ const installComponentFromUrl = async ({
|
|
|
166
167
|
addedComponentDids: componentDids,
|
|
167
168
|
context,
|
|
168
169
|
postAction: action,
|
|
169
|
-
shouldCleanUploadFile
|
|
170
|
+
shouldCleanUploadFile,
|
|
170
171
|
url,
|
|
171
172
|
};
|
|
172
173
|
|
|
@@ -38918,7 +38918,7 @@ module.exports = require("zlib");
|
|
|
38918
38918
|
/***/ ((module) => {
|
|
38919
38919
|
|
|
38920
38920
|
"use strict";
|
|
38921
|
-
module.exports = /*#__PURE__*/JSON.parse('{"name":"@abtnode/core","publishConfig":{"access":"public"},"version":"1.16.46","description":"","main":"lib/index.js","files":["lib"],"scripts":{"lint":"eslint tests lib --ignore-pattern \'tests/assets/*\'","lint:fix":"eslint --fix tests lib","test":"node tools/jest.js","coverage":"npm run test -- --coverage"},"keywords":[],"author":"wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)","license":"Apache-2.0","dependencies":{"@abtnode/analytics":"1.16.46","@abtnode/auth":"1.16.46","@abtnode/certificate-manager":"1.16.46","@abtnode/client":"1.16.46","@abtnode/constant":"1.16.46","@abtnode/cron":"1.16.46","@abtnode/db-cache":"1.16.46","@abtnode/docker-utils":"1.16.46","@abtnode/logger":"1.16.46","@abtnode/models":"1.16.46","@abtnode/queue":"1.16.46","@abtnode/rbac":"1.16.46","@abtnode/router-provider":"1.16.46","@abtnode/static-server":"1.16.46","@abtnode/timemachine":"1.16.46","@abtnode/util":"1.16.46","@aigne/aigne-hub":"^0.2.
|
|
38921
|
+
module.exports = /*#__PURE__*/JSON.parse('{"name":"@abtnode/core","publishConfig":{"access":"public"},"version":"1.16.46","description":"","main":"lib/index.js","files":["lib"],"scripts":{"lint":"eslint tests lib --ignore-pattern \'tests/assets/*\'","lint:fix":"eslint --fix tests lib","test":"node tools/jest.js","coverage":"npm run test -- --coverage"},"keywords":[],"author":"wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)","license":"Apache-2.0","dependencies":{"@abtnode/analytics":"1.16.46","@abtnode/auth":"1.16.46","@abtnode/certificate-manager":"1.16.46","@abtnode/client":"1.16.46","@abtnode/constant":"1.16.46","@abtnode/cron":"1.16.46","@abtnode/db-cache":"1.16.46","@abtnode/docker-utils":"1.16.46","@abtnode/logger":"1.16.46","@abtnode/models":"1.16.46","@abtnode/queue":"1.16.46","@abtnode/rbac":"1.16.46","@abtnode/router-provider":"1.16.46","@abtnode/static-server":"1.16.46","@abtnode/timemachine":"1.16.46","@abtnode/util":"1.16.46","@aigne/aigne-hub":"^0.2.2","@arcblock/did":"1.21.0","@arcblock/did-auth":"1.21.0","@arcblock/did-ext":"1.21.0","@arcblock/did-motif":"^1.1.14","@arcblock/did-util":"1.21.0","@arcblock/event-hub":"1.21.0","@arcblock/jwt":"1.21.0","@arcblock/pm2-events":"^0.0.5","@arcblock/validator":"1.21.0","@arcblock/vc":"1.21.0","@blocklet/constant":"1.16.46","@blocklet/did-space-js":"^1.1.10","@blocklet/env":"1.16.46","@blocklet/error":"^0.2.5","@blocklet/meta":"1.16.46","@blocklet/resolver":"1.16.46","@blocklet/sdk":"1.16.46","@blocklet/store":"1.16.46","@blocklet/theme":"^3.0.34","@fidm/x509":"^1.2.1","@ocap/mcrypto":"1.21.0","@ocap/util":"1.21.0","@ocap/wallet":"1.21.0","@slack/webhook":"^5.0.4","archiver":"^7.0.1","axios":"^1.7.9","axon":"^2.0.3","chalk":"^4.1.2","cross-spawn":"^7.0.3","dayjs":"^1.11.13","deep-diff":"^1.0.2","detect-port":"^1.5.1","envfile":"^7.1.0","escape-string-regexp":"^4.0.0","fast-glob":"^3.3.2","filesize":"^10.1.1","flat":"^5.0.2","fs-extra":"^11.2.0","get-port":"^5.1.1","hasha":"^5.2.2","is-base64":"^1.1.0","is-cidr":"4","is-ip":"3","is-url":"^1.2.4","joi":"17.12.2","joi-extension-semver":"^5.0.0","js-yaml":"^4.1.0","kill-port":"^2.0.1","lodash":"^4.17.21","node-stream-zip":"^1.15.0","p-all":"^3.0.0","p-limit":"^3.1.0","p-map":"^4.0.0","p-retry":"^4.6.2","p-wait-for":"^3.2.0","rate-limiter-flexible":"^5.0.5","read-last-lines":"^1.8.0","semver":"^7.6.3","sequelize":"^6.35.0","shelljs":"^0.8.5","slugify":"^1.6.6","ssri":"^8.0.1","stream-throttle":"^0.1.3","stream-to-promise":"^3.0.0","systeminformation":"^5.23.3","tail":"^2.2.4","tar":"^6.1.11","transliteration":"^2.3.5","ua-parser-js":"^1.0.2","ufo":"^1.5.3","uuid":"^11.1.0","valid-url":"^1.0.9","which":"^2.0.2","xbytes":"^1.8.0"},"devDependencies":{"expand-tilde":"^2.0.2","express":"^4.18.2","jest":"^29.7.0","unzipper":"^0.10.11"},"gitHead":"e5764f753181ed6a7c615cd4fc6682aacf0cb7cd"}');
|
|
38922
38922
|
|
|
38923
38923
|
/***/ }),
|
|
38924
38924
|
|
package/lib/event/util.js
CHANGED
|
@@ -11,10 +11,12 @@ const backupBlockletSites = async (blocklet) => {
|
|
|
11
11
|
const sites = await states.site.getSitesByBlocklet(blocklet.meta.did);
|
|
12
12
|
let backupFile = null;
|
|
13
13
|
try {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
if (blocklet.env) {
|
|
15
|
+
backupFile = path.join(blocklet.env.cacheDir, `sites-backup-${Date.now()}.json`);
|
|
16
|
+
logger.info(`backup blocklet sites to ${backupFile}`, { did: blocklet.meta.did, sites });
|
|
17
|
+
fs.writeFileSync(backupFile, JSON.stringify(sites));
|
|
18
|
+
logger.info('backup blocklet sites', { did: blocklet.meta.did, backupFile });
|
|
19
|
+
}
|
|
18
20
|
} catch (error) {
|
|
19
21
|
logger.error('backup blocklet sites error', { error });
|
|
20
22
|
}
|
package/lib/states/access-key.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
const get = require('lodash/get');
|
|
2
|
+
const uniq = require('lodash/uniq');
|
|
2
3
|
const { Op } = require('sequelize');
|
|
3
4
|
const { isValid } = require('@arcblock/did');
|
|
4
5
|
const { fromRandom, fromPublicKey } = require('@ocap/wallet');
|
|
5
6
|
const { toBase58, fromBase58 } = require('@ocap/util');
|
|
6
7
|
const { CustomError } = require('@blocklet/error');
|
|
7
8
|
const logger = require('@abtnode/logger')('@abtnode/core:states:access-key');
|
|
9
|
+
const { SERVER_ROLES } = require('@abtnode/constant');
|
|
8
10
|
const BaseState = require('./base');
|
|
9
11
|
const { accessKeySchema, REMARK_MAX_LENGTH } = require('../validators/access-key');
|
|
10
12
|
const { validateOperator, getEndpoint, isUserCenterPath } = require('../util/verify-access-key-user');
|
|
@@ -15,10 +17,32 @@ const validateRemark = (remark) => {
|
|
|
15
17
|
}
|
|
16
18
|
};
|
|
17
19
|
|
|
18
|
-
const validatePassport = (passport) => {
|
|
20
|
+
const validatePassport = (passport, context) => {
|
|
19
21
|
if (!passport) {
|
|
20
22
|
throw new CustomError(400, 'passport should not be empty');
|
|
21
23
|
}
|
|
24
|
+
|
|
25
|
+
const { user } = context;
|
|
26
|
+
logger.info('validate passport user', { userRole: user.role, passport });
|
|
27
|
+
|
|
28
|
+
const role = (user?.role || '').replace('blocklet-', '');
|
|
29
|
+
if (
|
|
30
|
+
[SERVER_ROLES.OWNER, SERVER_ROLES.ADMIN, SERVER_ROLES.BLOCKLET_OWNER, SERVER_ROLES.BLOCKLET_ADMIN].includes(role)
|
|
31
|
+
) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const roles = uniq([
|
|
36
|
+
...(user?.passports || []).filter((p) => p.status === 'valid').map((p) => p.role),
|
|
37
|
+
role,
|
|
38
|
+
'guest',
|
|
39
|
+
]);
|
|
40
|
+
if (!roles.includes(passport)) {
|
|
41
|
+
throw new CustomError(
|
|
42
|
+
400,
|
|
43
|
+
`You can not create access keys with passports you do not have access to: ${roles.join(',')}.`
|
|
44
|
+
);
|
|
45
|
+
}
|
|
22
46
|
};
|
|
23
47
|
|
|
24
48
|
const validateExpireAt = (expireAt) => {
|
|
@@ -43,11 +67,10 @@ class AccessKeyState extends BaseState {
|
|
|
43
67
|
resourceId = '',
|
|
44
68
|
createdVia = 'web',
|
|
45
69
|
expireAt = null,
|
|
46
|
-
createdBy = '',
|
|
47
70
|
} = input || {};
|
|
48
71
|
|
|
49
72
|
validateRemark(remark);
|
|
50
|
-
validatePassport(passport);
|
|
73
|
+
validatePassport(passport, context);
|
|
51
74
|
validateExpireAt(expireAt);
|
|
52
75
|
|
|
53
76
|
const wallet = newWallet || fromRandom();
|
|
@@ -67,7 +90,7 @@ class AccessKeyState extends BaseState {
|
|
|
67
90
|
data.remark = remark;
|
|
68
91
|
}
|
|
69
92
|
|
|
70
|
-
data.createdBy =
|
|
93
|
+
data.createdBy = getOperator(context);
|
|
71
94
|
data.updatedBy = data.createdBy;
|
|
72
95
|
|
|
73
96
|
await accessKeySchema.validateAsync(data, { stripUnknown: true });
|
|
@@ -123,17 +146,18 @@ class AccessKeyState extends BaseState {
|
|
|
123
146
|
const { accessKeyId, remark, passport, expireAt, authType } = input;
|
|
124
147
|
|
|
125
148
|
validateRemark(remark);
|
|
126
|
-
validatePassport(passport);
|
|
127
149
|
validateExpireAt(expireAt);
|
|
128
150
|
|
|
129
151
|
if (!accessKeyId) {
|
|
130
152
|
throw new CustomError(400, 'accessKeyId should not be empty');
|
|
131
153
|
}
|
|
154
|
+
|
|
132
155
|
const doc = await this.findOne({ accessKeyId });
|
|
133
|
-
if (!doc) {
|
|
134
|
-
|
|
135
|
-
}
|
|
156
|
+
if (!doc) throw new CustomError(404, `Access Key Id ${accessKeyId} does not exist`);
|
|
157
|
+
|
|
136
158
|
validateOperator(context, doc.createdBy);
|
|
159
|
+
validatePassport(passport, context);
|
|
160
|
+
|
|
137
161
|
if (remark !== undefined) {
|
|
138
162
|
doc.remark = remark;
|
|
139
163
|
}
|
|
@@ -2,6 +2,7 @@ const logger = require('@abtnode/logger')('@abtnode/core:states:notification');
|
|
|
2
2
|
const { MAX_PAGE_SIZE } = require('@abtnode/constant');
|
|
3
3
|
const { Sequelize, Op } = require('sequelize');
|
|
4
4
|
const { isValid } = require('@arcblock/did');
|
|
5
|
+
const { Joi } = require('@arcblock/validator');
|
|
5
6
|
const { ROLES, SERVER_ROLES, NOTIFICATION_SEND_CHANNEL, NOTIFICATION_SEND_STATUS } = require('@abtnode/constant');
|
|
6
7
|
const BaseState = require('./base');
|
|
7
8
|
const { getReceiversStatistics } = require('../util/notification');
|
|
@@ -31,6 +32,11 @@ const safeJsonParse = (json) => {
|
|
|
31
32
|
return JSON.parse(json);
|
|
32
33
|
};
|
|
33
34
|
|
|
35
|
+
const pagingSchema = Joi.object({
|
|
36
|
+
page: Joi.number().integer().min(1).default(1),
|
|
37
|
+
pageSize: Joi.number().integer().min(1).default(10),
|
|
38
|
+
});
|
|
39
|
+
|
|
34
40
|
/**
|
|
35
41
|
* @extends BaseState<import('@abtnode/models').NotificationState>
|
|
36
42
|
*/
|
|
@@ -223,7 +229,14 @@ class NotificationState extends BaseState {
|
|
|
223
229
|
throw new Error(errorMsg);
|
|
224
230
|
}
|
|
225
231
|
|
|
226
|
-
const {
|
|
232
|
+
const { error, value } = pagingSchema.validate(paging || {});
|
|
233
|
+
if (error) {
|
|
234
|
+
const { path, message } = error.details[0];
|
|
235
|
+
const field = path.join('.');
|
|
236
|
+
|
|
237
|
+
throw new Error(`Invalid paging parameter '${field}': ${message}. Page and pageSize must be positive integers.`);
|
|
238
|
+
}
|
|
239
|
+
const { pageSize, page } = value;
|
|
227
240
|
const curPageSize = pageSize > MAX_PAGE_SIZE ? MAX_PAGE_SIZE : pageSize;
|
|
228
241
|
const offset = (page - 1) * curPageSize;
|
|
229
242
|
|
package/lib/util/aigne-verify.js
CHANGED
|
@@ -30,7 +30,7 @@ const getAigneHubModelApi = async (url) => {
|
|
|
30
30
|
}
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
-
const verifyAigneHub = async (config,
|
|
33
|
+
const verifyAigneHub = async (config, blocklet) => {
|
|
34
34
|
try {
|
|
35
35
|
if (!config.url) {
|
|
36
36
|
return {
|
|
@@ -46,6 +46,7 @@ const verifyAigneHub = async (config, did) => {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
const baseUrl = await getAigneHubModelApi(config.url);
|
|
49
|
+
const { did, name } = blocklet.meta || {};
|
|
49
50
|
|
|
50
51
|
const modelConfig = {
|
|
51
52
|
accessKey: decryptValue(config.key, did),
|
|
@@ -56,7 +57,7 @@ const verifyAigneHub = async (config, did) => {
|
|
|
56
57
|
const model = new AIGNEHubChatModel(modelConfig);
|
|
57
58
|
|
|
58
59
|
const result = await model.invoke({
|
|
59
|
-
messages: [{ role: 'user', content:
|
|
60
|
+
messages: [{ role: 'user', content: `Hi there! This is ${name} Blocklet speaking. What's your name?` }],
|
|
60
61
|
});
|
|
61
62
|
|
|
62
63
|
return { valid: !!result };
|
|
@@ -76,7 +77,7 @@ const verifyAigneHub = async (config, did) => {
|
|
|
76
77
|
* @param {Object} [config.options] - 其他选项
|
|
77
78
|
* @returns {Promise<{valid: boolean, error?: string}>}
|
|
78
79
|
*/
|
|
79
|
-
async function verifyAigneConfig(config,
|
|
80
|
+
async function verifyAigneConfig(config, blocklet) {
|
|
80
81
|
try {
|
|
81
82
|
if (!config || typeof config !== 'object') {
|
|
82
83
|
return {
|
|
@@ -85,7 +86,7 @@ async function verifyAigneConfig(config, did) {
|
|
|
85
86
|
};
|
|
86
87
|
}
|
|
87
88
|
|
|
88
|
-
return await verifyAigneHub(config,
|
|
89
|
+
return await verifyAigneHub(config, blocklet);
|
|
89
90
|
} catch (error) {
|
|
90
91
|
return {
|
|
91
92
|
valid: false,
|
package/lib/util/check-dns.js
CHANGED
|
@@ -17,7 +17,7 @@ const getBlockletUrl = async (domain) => {
|
|
|
17
17
|
const url = convertDomainToUrl(domain);
|
|
18
18
|
const BLOCKLET_JSON_PATH = '__blocklet__.js?type=json';
|
|
19
19
|
const blockletUrl = joinURL(url, BLOCKLET_JSON_PATH);
|
|
20
|
-
const { data: blocklet } = await axios(blockletUrl);
|
|
20
|
+
const { data: blocklet } = await axios(blockletUrl, { timeout: 5000 });
|
|
21
21
|
|
|
22
22
|
if (typeof blocklet === 'object') {
|
|
23
23
|
return blocklet?.appId;
|
|
@@ -39,11 +39,7 @@ async function checkIsRedirectedBlocklet(domain1, domain2) {
|
|
|
39
39
|
|
|
40
40
|
return domain1Blocklet === domain2Blocklet;
|
|
41
41
|
} catch (err) {
|
|
42
|
-
logger.error('DNS resolution error:', {
|
|
43
|
-
domain1,
|
|
44
|
-
domain2,
|
|
45
|
-
error: err.message,
|
|
46
|
-
});
|
|
42
|
+
logger.error('DNS resolution error:', { domain1, domain2, error: err.message });
|
|
47
43
|
return false;
|
|
48
44
|
}
|
|
49
45
|
}
|
|
@@ -53,35 +49,17 @@ async function checkDnsAndCname(domain, expectedCname = '') {
|
|
|
53
49
|
const dnsRecords = await dns.resolve(domain);
|
|
54
50
|
logger.info('dnsRecords', { dnsRecords, domain });
|
|
55
51
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const isCnameMatch = cnameRecords.some((cname) => cname.toLowerCase() === expectedCname.toLowerCase());
|
|
59
|
-
|
|
60
|
-
return {
|
|
61
|
-
isDnsResolved: true,
|
|
62
|
-
hasCname: true,
|
|
63
|
-
cnameRecords,
|
|
64
|
-
isCnameMatch: isCnameMatch || (await checkIsRedirectedBlocklet(domain, expectedCname)),
|
|
65
|
-
};
|
|
66
|
-
} catch (cnameError) {
|
|
67
|
-
logger.error('match resolve name error', {
|
|
68
|
-
domain,
|
|
69
|
-
error: cnameError?.message,
|
|
70
|
-
});
|
|
52
|
+
const cnameRecords = await dns.resolveCname(domain).catch(() => []);
|
|
53
|
+
const isCnameMatch = cnameRecords.some((cname) => cname.toLowerCase() === expectedCname.toLowerCase());
|
|
71
54
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
};
|
|
79
|
-
}
|
|
55
|
+
return {
|
|
56
|
+
isDnsResolved: true,
|
|
57
|
+
hasCname: true,
|
|
58
|
+
cnameRecords,
|
|
59
|
+
isCnameMatch: isCnameMatch || (await checkIsRedirectedBlocklet(domain, expectedCname)),
|
|
60
|
+
};
|
|
80
61
|
} catch (error) {
|
|
81
|
-
logger.error('resolve name error', {
|
|
82
|
-
domain,
|
|
83
|
-
error: error?.message,
|
|
84
|
-
});
|
|
62
|
+
logger.error('resolve name error', { domain, error });
|
|
85
63
|
|
|
86
64
|
return {
|
|
87
65
|
isDnsResolved: false,
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.16.47-beta-
|
|
6
|
+
"version": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
7
7
|
"description": "",
|
|
8
8
|
"main": "lib/index.js",
|
|
9
9
|
"files": [
|
|
@@ -19,23 +19,23 @@
|
|
|
19
19
|
"author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
|
|
20
20
|
"license": "Apache-2.0",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@abtnode/analytics": "1.16.47-beta-
|
|
23
|
-
"@abtnode/auth": "1.16.47-beta-
|
|
24
|
-
"@abtnode/certificate-manager": "1.16.47-beta-
|
|
25
|
-
"@abtnode/client": "1.16.47-beta-
|
|
26
|
-
"@abtnode/constant": "1.16.47-beta-
|
|
27
|
-
"@abtnode/cron": "1.16.47-beta-
|
|
28
|
-
"@abtnode/db-cache": "1.16.47-beta-
|
|
29
|
-
"@abtnode/docker-utils": "1.16.47-beta-
|
|
30
|
-
"@abtnode/logger": "1.16.47-beta-
|
|
31
|
-
"@abtnode/models": "1.16.47-beta-
|
|
32
|
-
"@abtnode/queue": "1.16.47-beta-
|
|
33
|
-
"@abtnode/rbac": "1.16.47-beta-
|
|
34
|
-
"@abtnode/router-provider": "1.16.47-beta-
|
|
35
|
-
"@abtnode/static-server": "1.16.47-beta-
|
|
36
|
-
"@abtnode/timemachine": "1.16.47-beta-
|
|
37
|
-
"@abtnode/util": "1.16.47-beta-
|
|
38
|
-
"@aigne/aigne-hub": "^0.2.
|
|
22
|
+
"@abtnode/analytics": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
23
|
+
"@abtnode/auth": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
24
|
+
"@abtnode/certificate-manager": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
25
|
+
"@abtnode/client": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
26
|
+
"@abtnode/constant": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
27
|
+
"@abtnode/cron": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
28
|
+
"@abtnode/db-cache": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
29
|
+
"@abtnode/docker-utils": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
30
|
+
"@abtnode/logger": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
31
|
+
"@abtnode/models": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
32
|
+
"@abtnode/queue": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
33
|
+
"@abtnode/rbac": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
34
|
+
"@abtnode/router-provider": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
35
|
+
"@abtnode/static-server": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
36
|
+
"@abtnode/timemachine": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
37
|
+
"@abtnode/util": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
38
|
+
"@aigne/aigne-hub": "^0.2.2",
|
|
39
39
|
"@arcblock/did": "1.21.0",
|
|
40
40
|
"@arcblock/did-auth": "1.21.0",
|
|
41
41
|
"@arcblock/did-ext": "1.21.0",
|
|
@@ -46,15 +46,15 @@
|
|
|
46
46
|
"@arcblock/pm2-events": "^0.0.5",
|
|
47
47
|
"@arcblock/validator": "1.21.0",
|
|
48
48
|
"@arcblock/vc": "1.21.0",
|
|
49
|
-
"@blocklet/constant": "1.16.47-beta-
|
|
50
|
-
"@blocklet/did-space-js": "^1.1.
|
|
51
|
-
"@blocklet/env": "1.16.47-beta-
|
|
49
|
+
"@blocklet/constant": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
50
|
+
"@blocklet/did-space-js": "^1.1.10",
|
|
51
|
+
"@blocklet/env": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
52
52
|
"@blocklet/error": "^0.2.5",
|
|
53
|
-
"@blocklet/meta": "1.16.47-beta-
|
|
54
|
-
"@blocklet/resolver": "1.16.47-beta-
|
|
55
|
-
"@blocklet/sdk": "1.16.47-beta-
|
|
56
|
-
"@blocklet/store": "1.16.47-beta-
|
|
57
|
-
"@blocklet/theme": "^3.0.
|
|
53
|
+
"@blocklet/meta": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
54
|
+
"@blocklet/resolver": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
55
|
+
"@blocklet/sdk": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
56
|
+
"@blocklet/store": "1.16.47-beta-20250729-045152-0bde0f98",
|
|
57
|
+
"@blocklet/theme": "^3.0.34",
|
|
58
58
|
"@fidm/x509": "^1.2.1",
|
|
59
59
|
"@ocap/mcrypto": "1.21.0",
|
|
60
60
|
"@ocap/util": "1.21.0",
|
|
@@ -117,5 +117,5 @@
|
|
|
117
117
|
"jest": "^29.7.0",
|
|
118
118
|
"unzipper": "^0.10.11"
|
|
119
119
|
},
|
|
120
|
-
"gitHead": "
|
|
120
|
+
"gitHead": "554bd257e6e9aaa2c63d2b6558871f632f7f8ea4"
|
|
121
121
|
}
|