@abtnode/core 1.16.47-beta-20250805-095401-14eb156b → 1.16.47-beta-20250807-110715-19ad6b43
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/migration-dist/migration.cjs +1 -1
- package/lib/states/base.js +33 -0
- package/lib/states/user.js +4 -0
- package/lib/states/webhook-endpoint.js +7 -2
- package/lib/states/webhook.js +4 -0
- package/lib/util/aigne-verify.js +1 -1
- package/lib/util/blocklet.js +2 -1
- package/lib/util/env.js +2 -0
- package/lib/util/reset-node.js +2 -1
- package/lib/webhook/index.js +10 -1
- package/lib/webhook/sender/api/index.js +4 -0
- package/package.json +38 -37
|
@@ -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.
|
|
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.4.5","@arcblock/did":"1.21.2","@arcblock/did-connect-js":"1.21.2","@arcblock/did-ext":"1.21.2","@arcblock/did-motif":"^1.1.14","@arcblock/did-util":"1.21.2","@arcblock/event-hub":"1.21.2","@arcblock/jwt":"1.21.2","@arcblock/pm2-events":"^0.0.5","@arcblock/validator":"1.21.2","@arcblock/vc":"1.21.2","@blocklet/constant":"1.16.46","@blocklet/did-space-js":"^1.1.13","@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.42","@fidm/x509":"^1.2.1","@ocap/mcrypto":"1.21.2","@ocap/util":"1.21.2","@ocap/wallet":"1.21.2","@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","private-ip":"^2.3.4","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/states/base.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
const { BaseState } = require('@abtnode/models');
|
|
2
|
+
const { isAllowedURL } = require('@abtnode/util/lib/ssrf-protector');
|
|
3
|
+
const { CustomError } = require('@blocklet/error');
|
|
2
4
|
const logger = require('@abtnode/logger')('@abtnode/core:states:base');
|
|
3
5
|
|
|
4
6
|
const { isCLI } = require('../util');
|
|
@@ -20,6 +22,37 @@ class ExtendedBase extends BaseState {
|
|
|
20
22
|
update(condition, updates, options) {
|
|
21
23
|
return super.update(condition, updates, { returnUpdatedDocs: true, ...options });
|
|
22
24
|
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* 验证输入的URL是否合法,如果非法禁止保存
|
|
28
|
+
*/
|
|
29
|
+
async validateURL(urls = [], label = '') {
|
|
30
|
+
if (urls.length === 0) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
const validateResults = await Promise.all(
|
|
34
|
+
urls.map(async (url) => {
|
|
35
|
+
try {
|
|
36
|
+
const allowed = await isAllowedURL(url);
|
|
37
|
+
return { url, allowed };
|
|
38
|
+
} catch (error) {
|
|
39
|
+
logger.warn('URL validation failed', { url, error });
|
|
40
|
+
return { url, allowed: false };
|
|
41
|
+
}
|
|
42
|
+
})
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
const allowed = validateResults.every((item) => item.allowed);
|
|
46
|
+
if (!allowed) {
|
|
47
|
+
const invalidUrls = validateResults
|
|
48
|
+
.filter((result) => !result.allowed)
|
|
49
|
+
.map((result) => result.url)
|
|
50
|
+
.filter(Boolean);
|
|
51
|
+
|
|
52
|
+
throw new CustomError(400, `Invalid ${label || 'URLs'}: ${invalidUrls.join(', ')}`);
|
|
53
|
+
}
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
23
56
|
}
|
|
24
57
|
|
|
25
58
|
module.exports = ExtendedBase;
|
package/lib/states/user.js
CHANGED
|
@@ -121,6 +121,10 @@ class User extends ExtendBase {
|
|
|
121
121
|
Object.assign(pending, await this._extractInviteInfo({ did, ...pending }));
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
// 验证 webhooks 中 URL 是否合法
|
|
125
|
+
const webhooks = get(pending, 'extra.webhooks', []);
|
|
126
|
+
await this.validateURL(webhooks.map((x) => x.url));
|
|
127
|
+
|
|
124
128
|
await super.update({ did }, { $set: pending });
|
|
125
129
|
await Promise.all(
|
|
126
130
|
(get(cloneData, 'passports') || [])
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
const Joi = require('joi');
|
|
2
|
+
const { CustomError } = require('@blocklet/error');
|
|
3
|
+
|
|
2
4
|
const BaseState = require('./base');
|
|
3
5
|
|
|
4
6
|
const webhookEndpointSchema = Joi.object({
|
|
@@ -41,6 +43,9 @@ const updateWebhookEndpointSchema = Joi.object({
|
|
|
41
43
|
*/
|
|
42
44
|
class WebhookEndpointState extends BaseState {
|
|
43
45
|
async create(input) {
|
|
46
|
+
// 校验非法的URL
|
|
47
|
+
await this.validateURL([input.url], 'webhook endpoint URL');
|
|
48
|
+
|
|
44
49
|
await webhookEndpointSchema.validateAsync(input, { stripUnknown: true });
|
|
45
50
|
|
|
46
51
|
const webhook = await this.insert(input);
|
|
@@ -55,7 +60,7 @@ class WebhookEndpointState extends BaseState {
|
|
|
55
60
|
async updateWebhook(id, updates) {
|
|
56
61
|
const doc = await this.findOne({ where: { id } });
|
|
57
62
|
if (!doc) {
|
|
58
|
-
throw new
|
|
63
|
+
throw new CustomError(400, 'webhook endpoint not found');
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
await updateWebhookEndpointSchema.validateAsync(updates, { stripUnknown: true });
|
|
@@ -67,7 +72,7 @@ class WebhookEndpointState extends BaseState {
|
|
|
67
72
|
async deleteWebhook(id) {
|
|
68
73
|
const doc = await this.findOne({ where: { id } });
|
|
69
74
|
if (!doc) {
|
|
70
|
-
throw new
|
|
75
|
+
throw new CustomError(400, 'webhook endpoint not found');
|
|
71
76
|
}
|
|
72
77
|
|
|
73
78
|
await this.remove({ id });
|
package/lib/states/webhook.js
CHANGED
|
@@ -9,6 +9,10 @@ const { validateWebhook } = require('../validators/webhook');
|
|
|
9
9
|
class WebhookState extends BaseState {
|
|
10
10
|
async create(info, { mock } = {}) {
|
|
11
11
|
const { type, params } = info;
|
|
12
|
+
|
|
13
|
+
const urls = params.map((item) => item.value);
|
|
14
|
+
await this.validateURL(urls, 'webhook URLs');
|
|
15
|
+
|
|
12
16
|
const filterParams = params.map((item) => {
|
|
13
17
|
const data = {
|
|
14
18
|
name: item.name,
|
package/lib/util/aigne-verify.js
CHANGED
|
@@ -49,7 +49,7 @@ const verifyAigneHub = async (config, blocklet) => {
|
|
|
49
49
|
const { did, name } = blocklet.meta || {};
|
|
50
50
|
|
|
51
51
|
const modelConfig = {
|
|
52
|
-
|
|
52
|
+
apiKey: decryptValue(config.key, did),
|
|
53
53
|
model: !config.model || config.model === 'auto' ? undefined : config.model,
|
|
54
54
|
url: baseUrl,
|
|
55
55
|
};
|
package/lib/util/blocklet.js
CHANGED
|
@@ -21,7 +21,7 @@ const diff = require('deep-diff');
|
|
|
21
21
|
const createArchive = require('archiver');
|
|
22
22
|
const isUrl = require('is-url');
|
|
23
23
|
const semver = require('semver');
|
|
24
|
-
const { chainInfo: chainInfoSchema } = require('@arcblock/did-
|
|
24
|
+
const { chainInfo: chainInfoSchema } = require('@arcblock/did-connect-js/lib/schema');
|
|
25
25
|
|
|
26
26
|
const urlPathFriendly = require('@blocklet/meta/lib/url-path-friendly').default;
|
|
27
27
|
const { fromSecretKey, fromPublicKey } = require('@ocap/wallet');
|
|
@@ -737,6 +737,7 @@ const startBlockletProcess = async (
|
|
|
737
737
|
|
|
738
738
|
if (b.mode === BLOCKLET_MODES.DEVELOPMENT) {
|
|
739
739
|
options.env.NODE_ENV = e2eMode ? 'e2e' : 'development';
|
|
740
|
+
options.env.IS_E2E = e2eMode ? '1' : undefined;
|
|
740
741
|
options.env.BROWSER = 'none';
|
|
741
742
|
options.env.PORT = options.env[BLOCKLET_DEFAULT_PORT_NAME];
|
|
742
743
|
|
package/lib/util/env.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const serverJobBackoffSeconds = process.env.ABT_NODE_JOB_BACKOFF_SECONDS
|
|
2
2
|
? +process.env.ABT_NODE_JOB_BACKOFF_SECONDS
|
|
3
3
|
: 600;
|
|
4
|
+
const isE2E = process.env.NODE_ENV === 'e2e' || ['1', 'true'].includes(process.env.IS_E2E);
|
|
4
5
|
|
|
5
6
|
const shouldJobBackoff = () => {
|
|
6
7
|
if (process.env.ABT_NODE_JOB_BACKOFF_SECONDS === '0') {
|
|
@@ -13,4 +14,5 @@ const shouldJobBackoff = () => {
|
|
|
13
14
|
module.exports = {
|
|
14
15
|
serverJobBackoffSeconds,
|
|
15
16
|
shouldJobBackoff,
|
|
17
|
+
isE2E,
|
|
16
18
|
};
|
package/lib/util/reset-node.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const logger = require('@abtnode/logger')('@abtnode/core:util:reset');
|
|
2
2
|
|
|
3
3
|
const states = require('../states');
|
|
4
|
+
const { isE2E } = require('./env');
|
|
4
5
|
|
|
5
6
|
const noop = () => true;
|
|
6
7
|
|
|
@@ -121,7 +122,7 @@ module.exports = async ({
|
|
|
121
122
|
teamManager,
|
|
122
123
|
certManager,
|
|
123
124
|
}) => {
|
|
124
|
-
if (
|
|
125
|
+
if (!isE2E) {
|
|
125
126
|
throw new Error('Reset node only exists for test purpose');
|
|
126
127
|
}
|
|
127
128
|
|
package/lib/webhook/index.js
CHANGED
|
@@ -3,6 +3,7 @@ const { evaluateURLs } = require('@abtnode/util/lib/url-evaluation');
|
|
|
3
3
|
const checkURLAccessible = require('@abtnode/util/lib/url-evaluation/check-accessible-node');
|
|
4
4
|
const { EVENTS } = require('@abtnode/constant');
|
|
5
5
|
const isEmpty = require('lodash/isEmpty');
|
|
6
|
+
const { isAllowedReferer } = require('@abtnode/util/lib/ssrf-protector');
|
|
6
7
|
|
|
7
8
|
const { joinURL } = require('ufo');
|
|
8
9
|
const isUrl = require('is-url');
|
|
@@ -235,13 +236,21 @@ module.exports = ({ events, dataDirs, instance, teamManager }) => {
|
|
|
235
236
|
}
|
|
236
237
|
};
|
|
237
238
|
|
|
238
|
-
const sendTestMessage = async (msg) => {
|
|
239
|
+
const sendTestMessage = async (msg, context) => {
|
|
239
240
|
const { webhookId, message } = msg;
|
|
240
241
|
try {
|
|
242
|
+
if (context?.referer) {
|
|
243
|
+
const { host = '' } = context || {};
|
|
244
|
+
if (!isAllowedReferer(context.referer, host)) {
|
|
245
|
+
throw new Error('Invalid request');
|
|
246
|
+
}
|
|
247
|
+
}
|
|
241
248
|
const webhook = webhookId ? await webhookState.findOne(webhookId) : msg.webhook;
|
|
249
|
+
|
|
242
250
|
await sentTextMessage(webhook, message);
|
|
243
251
|
} catch (error) {
|
|
244
252
|
logger.error('webhook sender error', { error, msg });
|
|
253
|
+
throw new Error(error.message);
|
|
245
254
|
}
|
|
246
255
|
};
|
|
247
256
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const Joi = require('joi');
|
|
2
2
|
const axios = require('@abtnode/util/lib/axios');
|
|
3
3
|
const logger = require('@abtnode/logger')('@abtnode/core:sender:api');
|
|
4
|
+
const { isAllowedURL } = require('@abtnode/util/lib/ssrf-protector');
|
|
4
5
|
const BaseSender = require('../base');
|
|
5
6
|
|
|
6
7
|
class APISender extends BaseSender {
|
|
@@ -9,6 +10,9 @@ class APISender extends BaseSender {
|
|
|
9
10
|
const { status, name, title, description } = message;
|
|
10
11
|
|
|
11
12
|
try {
|
|
13
|
+
if (!(await isAllowedURL(url))) {
|
|
14
|
+
throw new Error('Invalid URL');
|
|
15
|
+
}
|
|
12
16
|
await axios.post(
|
|
13
17
|
url,
|
|
14
18
|
{
|
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-20250807-110715-19ad6b43",
|
|
7
7
|
"description": "",
|
|
8
8
|
"main": "lib/index.js",
|
|
9
9
|
"files": [
|
|
@@ -19,46 +19,46 @@
|
|
|
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.
|
|
39
|
-
"@arcblock/did": "1.21.
|
|
40
|
-
"@arcblock/did-
|
|
41
|
-
"@arcblock/did-ext": "1.21.
|
|
22
|
+
"@abtnode/analytics": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
23
|
+
"@abtnode/auth": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
24
|
+
"@abtnode/certificate-manager": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
25
|
+
"@abtnode/client": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
26
|
+
"@abtnode/constant": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
27
|
+
"@abtnode/cron": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
28
|
+
"@abtnode/db-cache": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
29
|
+
"@abtnode/docker-utils": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
30
|
+
"@abtnode/logger": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
31
|
+
"@abtnode/models": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
32
|
+
"@abtnode/queue": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
33
|
+
"@abtnode/rbac": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
34
|
+
"@abtnode/router-provider": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
35
|
+
"@abtnode/static-server": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
36
|
+
"@abtnode/timemachine": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
37
|
+
"@abtnode/util": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
38
|
+
"@aigne/aigne-hub": "^0.4.5",
|
|
39
|
+
"@arcblock/did": "1.21.2",
|
|
40
|
+
"@arcblock/did-connect-js": "1.21.2",
|
|
41
|
+
"@arcblock/did-ext": "1.21.2",
|
|
42
42
|
"@arcblock/did-motif": "^1.1.14",
|
|
43
|
-
"@arcblock/did-util": "1.21.
|
|
44
|
-
"@arcblock/event-hub": "1.21.
|
|
45
|
-
"@arcblock/jwt": "1.21.
|
|
43
|
+
"@arcblock/did-util": "1.21.2",
|
|
44
|
+
"@arcblock/event-hub": "1.21.2",
|
|
45
|
+
"@arcblock/jwt": "1.21.2",
|
|
46
46
|
"@arcblock/pm2-events": "^0.0.5",
|
|
47
|
-
"@arcblock/validator": "1.21.
|
|
48
|
-
"@arcblock/vc": "1.21.
|
|
49
|
-
"@blocklet/constant": "1.16.47-beta-
|
|
47
|
+
"@arcblock/validator": "1.21.2",
|
|
48
|
+
"@arcblock/vc": "1.21.2",
|
|
49
|
+
"@blocklet/constant": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
50
50
|
"@blocklet/did-space-js": "^1.1.13",
|
|
51
|
-
"@blocklet/env": "1.16.47-beta-
|
|
51
|
+
"@blocklet/env": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
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-20250807-110715-19ad6b43",
|
|
54
|
+
"@blocklet/resolver": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
55
|
+
"@blocklet/sdk": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
56
|
+
"@blocklet/store": "1.16.47-beta-20250807-110715-19ad6b43",
|
|
57
|
+
"@blocklet/theme": "^3.0.42",
|
|
58
58
|
"@fidm/x509": "^1.2.1",
|
|
59
|
-
"@ocap/mcrypto": "1.21.
|
|
60
|
-
"@ocap/util": "1.21.
|
|
61
|
-
"@ocap/wallet": "1.21.
|
|
59
|
+
"@ocap/mcrypto": "1.21.2",
|
|
60
|
+
"@ocap/util": "1.21.2",
|
|
61
|
+
"@ocap/wallet": "1.21.2",
|
|
62
62
|
"@slack/webhook": "^5.0.4",
|
|
63
63
|
"archiver": "^7.0.1",
|
|
64
64
|
"axios": "^1.7.9",
|
|
@@ -91,6 +91,7 @@
|
|
|
91
91
|
"p-map": "^4.0.0",
|
|
92
92
|
"p-retry": "^4.6.2",
|
|
93
93
|
"p-wait-for": "^3.2.0",
|
|
94
|
+
"private-ip": "^2.3.4",
|
|
94
95
|
"rate-limiter-flexible": "^5.0.5",
|
|
95
96
|
"read-last-lines": "^1.8.0",
|
|
96
97
|
"semver": "^7.6.3",
|
|
@@ -117,5 +118,5 @@
|
|
|
117
118
|
"jest": "^29.7.0",
|
|
118
119
|
"unzipper": "^0.10.11"
|
|
119
120
|
},
|
|
120
|
-
"gitHead": "
|
|
121
|
+
"gitHead": "639aa367b25d6885e38cba99f73d753b2831393d"
|
|
121
122
|
}
|