@abtnode/core 1.16.43-beta-20250427-132304-6da95c55 → 1.16.43-beta-20250429-130236-269254ff

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.
@@ -1848,7 +1848,9 @@ class DiskBlockletManager extends BaseBlockletManager {
1848
1848
  BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_DESCRIPTION,
1849
1849
  BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_LOGO,
1850
1850
  BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_LOGO_SQUARE,
1851
+ BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_LOGO_SQUARE_DARK,
1851
1852
  BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_LOGO_RECT,
1853
+ BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_LOGO_RECT_DARK,
1852
1854
  BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_LOGO_FAVICON,
1853
1855
  ];
1854
1856
 
@@ -2335,7 +2337,7 @@ class DiskBlockletManager extends BaseBlockletManager {
2335
2337
  }
2336
2338
 
2337
2339
  const cert = await this.certManager.manager.getByDomain(alias.value);
2338
- if (cert.status === 'error') {
2340
+ if (cert?.status === 'error') {
2339
2341
  await issueCert(alias);
2340
2342
  }
2341
2343
  })
@@ -2418,6 +2420,7 @@ class DiskBlockletManager extends BaseBlockletManager {
2418
2420
  {
2419
2421
  name: 'update-blocklet-certificate',
2420
2422
  time: '*/10 * * * *',
2423
+ options: { runOnInit: false },
2421
2424
  fn: () => {
2422
2425
  if (Date.now() - startTime > TWO_DAYS) {
2423
2426
  return;
@@ -38744,7 +38744,7 @@ module.exports = require("zlib");
38744
38744
  /***/ ((module) => {
38745
38745
 
38746
38746
  "use strict";
38747
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@abtnode/core","publishConfig":{"access":"public"},"version":"1.16.42","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.42","@abtnode/auth":"1.16.42","@abtnode/certificate-manager":"1.16.42","@abtnode/client":"^1.16.42","@abtnode/constant":"1.16.42","@abtnode/cron":"1.16.42","@abtnode/docker-utils":"1.16.42","@abtnode/logger":"1.16.42","@abtnode/models":"1.16.42","@abtnode/queue":"1.16.42","@abtnode/rbac":"1.16.42","@abtnode/router-provider":"1.16.42","@abtnode/static-server":"1.16.42","@abtnode/timemachine":"1.16.42","@abtnode/util":"1.16.42","@arcblock/did":"1.20.2","@arcblock/did-auth":"1.20.2","@arcblock/did-ext":"^1.20.2","@arcblock/did-motif":"^1.1.13","@arcblock/did-util":"1.20.2","@arcblock/event-hub":"1.20.2","@arcblock/jwt":"^1.20.2","@arcblock/pm2-events":"^0.0.5","@arcblock/validator":"^1.20.2","@arcblock/vc":"1.20.2","@blocklet/constant":"1.16.42","@blocklet/did-space-js":"^1.0.48","@blocklet/env":"1.16.42","@blocklet/error":"^0.2.4","@blocklet/meta":"1.16.42","@blocklet/resolver":"1.16.42","@blocklet/sdk":"1.16.42","@blocklet/store":"1.16.42","@blocklet/theme":"^2.13.12","@fidm/x509":"^1.2.1","@ocap/mcrypto":"1.20.2","@ocap/util":"1.20.2","@ocap/wallet":"1.20.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","lru-cache":"^11.0.2","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":"^9.0.1","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"}');
38747
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@abtnode/core","publishConfig":{"access":"public"},"version":"1.16.42","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.42","@abtnode/auth":"1.16.42","@abtnode/certificate-manager":"1.16.42","@abtnode/client":"^1.16.42","@abtnode/constant":"1.16.42","@abtnode/cron":"1.16.42","@abtnode/docker-utils":"1.16.42","@abtnode/logger":"1.16.42","@abtnode/models":"1.16.42","@abtnode/queue":"1.16.42","@abtnode/rbac":"1.16.42","@abtnode/router-provider":"1.16.42","@abtnode/static-server":"1.16.42","@abtnode/timemachine":"1.16.42","@abtnode/util":"1.16.42","@arcblock/did":"1.20.2","@arcblock/did-auth":"1.20.2","@arcblock/did-ext":"^1.20.2","@arcblock/did-motif":"^1.1.13","@arcblock/did-util":"1.20.2","@arcblock/event-hub":"1.20.2","@arcblock/jwt":"^1.20.2","@arcblock/pm2-events":"^0.0.5","@arcblock/validator":"^1.20.2","@arcblock/vc":"1.20.2","@blocklet/constant":"1.16.42","@blocklet/did-space-js":"^1.0.48","@blocklet/env":"1.16.42","@blocklet/error":"^0.2.4","@blocklet/meta":"1.16.42","@blocklet/resolver":"1.16.42","@blocklet/sdk":"1.16.42","@blocklet/store":"1.16.42","@blocklet/theme":"^2.13.14","@fidm/x509":"^1.2.1","@ocap/mcrypto":"1.20.2","@ocap/util":"1.20.2","@ocap/wallet":"1.20.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","lru-cache":"^11.0.2","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":"^9.0.1","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"}');
38748
38748
 
38749
38749
  /***/ }),
38750
38750
 
@@ -129,6 +129,7 @@ class Router {
129
129
  global: GATEWAY_RATE_LIMIT_GLOBAL.min,
130
130
  methods: GATEWAY_RATE_LIMIT_METHODS,
131
131
  burstFactor: 2,
132
+ burstDelay: 0,
132
133
  },
133
134
  nodeInfo.routing.requestLimit
134
135
  );
@@ -35,7 +35,7 @@ function parseLogEntry(line, check = true) {
35
35
  logEntry.status !== 503 &&
36
36
  logEntry.status <= 599 &&
37
37
  logEntry.request.includes('/.well-known/did.json') === false &&
38
- logEntry.request.includes('/websocket?token=') === false &&
38
+ logEntry.request.includes('/websocket') === false &&
39
39
  logEntry.request.includes('/.well-known/service/health') === false
40
40
  ) {
41
41
  console.warn(`5xx request detected: ${logEntry.host}`, line);
@@ -1,4 +1,4 @@
1
- // FIXME: use a crash safe store for the limiter
1
+ // FIXME: @wangshijun use a crash safe store for the limiter
2
2
  const dayjs = require('@abtnode/util/lib/dayjs');
3
3
  const { BLACKLIST_SCOPE } = require('@abtnode/constant');
4
4
  const { RateLimiterMemory } = require('rate-limiter-flexible');
@@ -3,38 +3,52 @@ const { createLogWatcher } = require('../watcher');
3
3
  // Function to parse the log entry and extract relevant information
4
4
  function parseLogEntry(line) {
5
5
  // Quick check before regex
6
- if (!line.includes('ModSecurity:')) {
6
+ if (!line.includes('ModSecurity:') && !line.includes('limiting requests, excess:')) {
7
7
  return null;
8
8
  }
9
9
 
10
- const pattern =
11
- /^(\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}).*\[error\].*\[client (\d+\.\d+\.\d+\.\d+)\].*ModSecurity:.*\[id "(\d+)"\].*\[unique_id "([^"]+)"\]/;
10
+ let logEntry = null;
12
11
 
13
- const match = line.match(pattern);
12
+ // ModSecurity log pattern
13
+ const wafPattern =
14
+ /^(\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}).*\[error\].*\[client (\d+\.\d+\.\d+\.\d+)\].*ModSecurity:.*\[id "(\d+)"\].*\[unique_id "([^"]+)"\]/;
15
+ let match = line.match(wafPattern);
14
16
  if (match) {
15
- const logEntry = {
17
+ logEntry = {
16
18
  type: 'modsecurity',
17
19
  timestamp: match[1],
18
20
  ip: match[2],
19
21
  ruleId: match[3],
20
22
  requestId: match[4],
21
23
  };
24
+ }
22
25
 
23
- // Ignore old log entries
24
- if (process.env.NODE_ENV === 'test') {
25
- return logEntry;
26
- }
27
-
28
- const now = Date.now();
29
- const timestamp = new Date(match[1]).getTime();
30
- if (now - timestamp > 1000) {
31
- return null;
32
- }
26
+ // Nginx rate limiting log pattern
27
+ const rateLimitPattern =
28
+ /^(\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}).*\[error\].*limiting requests, excess: ([\d.]+) by zone "([^"]+)", client: (\d+\.\d+\.\d+\.\d+),/;
29
+ match = line.match(rateLimitPattern);
30
+ if (match) {
31
+ logEntry = {
32
+ type: 'rate_limit',
33
+ timestamp: match[1],
34
+ excess: parseFloat(match[2]),
35
+ zone: match[3],
36
+ ip: match[4],
37
+ };
38
+ }
33
39
 
40
+ if (process.env.NODE_ENV === 'test') {
34
41
  return logEntry;
35
42
  }
36
43
 
37
- return null;
44
+ // Ignore old log entries
45
+ const now = Date.now();
46
+ const timestamp = new Date(match[1]).getTime();
47
+ if (now - timestamp > 1000) {
48
+ return null;
49
+ }
50
+
51
+ return logEntry;
38
52
  }
39
53
 
40
54
  const logWatcher = createLogWatcher(parseLogEntry);
@@ -8,6 +8,8 @@ const os = require('os');
8
8
  const tar = require('tar');
9
9
  const get = require('lodash/get');
10
10
  const uniq = require('lodash/uniq');
11
+ const cloneDeep = require('lodash/cloneDeep');
12
+ const mergeWith = require('lodash/mergeWith');
11
13
  const toLower = require('lodash/toLower');
12
14
  const isEmpty = require('lodash/isEmpty');
13
15
  const streamToPromise = require('stream-to-promise');
@@ -1532,10 +1534,23 @@ const _getBlocklet = async ({
1532
1534
  }
1533
1535
 
1534
1536
  blocklet.settings.storeList = blocklet.settings.storeList || [];
1535
- blocklet.settings.theme = blocklet.settings.theme || {
1536
- light: BLOCKLET_THEME_LIGHT,
1537
- dark: BLOCKLET_THEME_DARK,
1538
- };
1537
+ blocklet.settings.theme = mergeWith(
1538
+ cloneDeep({
1539
+ light: BLOCKLET_THEME_LIGHT,
1540
+ dark: BLOCKLET_THEME_DARK,
1541
+ prefer: 'light',
1542
+ }),
1543
+ blocklet.settings.theme,
1544
+ // 数组值直接替换
1545
+ (_, srcValue) => {
1546
+ if (Array.isArray(srcValue)) {
1547
+ return srcValue;
1548
+ }
1549
+ return undefined;
1550
+ }
1551
+ );
1552
+
1553
+ blocklet.settings.languages = blocklet.settings.languages || [];
1539
1554
 
1540
1555
  const nodeInfo = await states.node.read();
1541
1556
 
@@ -1748,7 +1763,9 @@ const validateAppConfig = async (config, states) => {
1748
1763
  [
1749
1764
  BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_LOGO,
1750
1765
  BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_LOGO_RECT,
1766
+ BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_LOGO_RECT_DARK,
1751
1767
  BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_LOGO_SQUARE,
1768
+ BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_LOGO_SQUARE_DARK,
1752
1769
  BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_LOGO_FAVICON,
1753
1770
  BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_SPLASH_PORTRAIT,
1754
1771
  BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_SPLASH_LANDSCAPE,
@@ -1,5 +1,5 @@
1
1
  const crypto = require('crypto');
2
- const { BLOCKLET_AUTOMATIC_ENV_VALUE } = require('@blocklet/constant');
2
+ const { BLOCKLET_AUTOMATIC_ENV_VALUE, BLOCKLET_AUTOMATIC_ENV_VALUE_REGEX } = require('@blocklet/constant');
3
3
  const { getObjByPath } = require('@abtnode/docker-utils');
4
4
  const { isValid: isDid } = require('@arcblock/did');
5
5
  const parseDockerName = require('./parse-docker-name');
@@ -7,7 +7,7 @@ const parseDockerName = require('./parse-docker-name');
7
7
  function replaceEnvValue(dockerEnv, rootBlocklet, dockerNamePrefix) {
8
8
  // 正则匹配形如 zxxxxxxxxxxxx...(30-40位)-(host|port|env.xxx|ports.xxx),全局匹配
9
9
  // const regex = /z[a-zA-Z0-9]{30,40}-(?:host|port|env\.[^.]+|ports\.[^.]+)/g;
10
- const regex = /z[a-zA-Z0-9]{30,40}-(?:host|ports\.[A-Za-z0-9_-]+|env\.[A-Za-z0-9_-]+|port)/g;
10
+ const regex = BLOCKLET_AUTOMATIC_ENV_VALUE_REGEX;
11
11
  const envKeys = Object.keys(dockerEnv);
12
12
 
13
13
  envKeys.forEach((key) => {
@@ -15,9 +15,9 @@ const accessKeySchema = Joi.object({
15
15
  'string.max': 'Access Key Public length must be less than or equal to 256 characters long',
16
16
  }),
17
17
 
18
- passport: Joi.string().required().max(16).messages({
18
+ passport: Joi.string().required().max(40).messages({
19
19
  'string.empty': 'Passport cannot be empty',
20
- 'string.max': 'Passport length must be less than or equal to 16 characters long',
20
+ 'string.max': 'Passport length must be less than or equal to 40 characters long',
21
21
  }),
22
22
 
23
23
  remark: Joi.string().allow('').max(128).messages({
@@ -78,6 +78,7 @@ const updateGatewaySchema = Joi.object({
78
78
  .max(GATEWAY_RATE_LIMIT_BURST_FACTOR.max)
79
79
  .default(2)
80
80
  .when('requestLimit.enabled', { is: true, then: Joi.required() }),
81
+ burstDelay: Joi.number().min(0).max(60).default(0).when('requestLimit.enabled', { is: true, then: Joi.required() }),
81
82
  rate: Joi.number()
82
83
  .min(GATEWAY_RATE_LIMIT.min)
83
84
  .max(GATEWAY_RATE_LIMIT.max)
@@ -128,7 +129,7 @@ const updateGatewaySchema = Joi.object({
128
129
  enabled: Joi.boolean().optional().default(false),
129
130
  windowSize: Joi.number().integer().min(1).default(1), // in seconds
130
131
  windowQuota: Joi.number().integer().min(2).default(5), // number of requests
131
- statusCodes: Joi.array().items(Joi.number().integer().min(100).max(599)).default([403]), // status codes to check
132
+ statusCodes: Joi.array().items(Joi.number().integer().min(100).max(599)).default([403, 429]).min(1), // status codes to check
132
133
  blockDuration: Joi.number().integer().min(60).default(3600), // in seconds
133
134
  }).default({
134
135
  enabled: false,
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.43-beta-20250427-132304-6da95c55",
6
+ "version": "1.16.43-beta-20250429-130236-269254ff",
7
7
  "description": "",
8
8
  "main": "lib/index.js",
9
9
  "files": [
@@ -19,21 +19,21 @@
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.43-beta-20250427-132304-6da95c55",
23
- "@abtnode/auth": "1.16.43-beta-20250427-132304-6da95c55",
24
- "@abtnode/certificate-manager": "1.16.43-beta-20250427-132304-6da95c55",
25
- "@abtnode/client": "1.16.43-beta-20250427-132304-6da95c55",
26
- "@abtnode/constant": "1.16.43-beta-20250427-132304-6da95c55",
27
- "@abtnode/cron": "1.16.43-beta-20250427-132304-6da95c55",
28
- "@abtnode/docker-utils": "1.16.43-beta-20250427-132304-6da95c55",
29
- "@abtnode/logger": "1.16.43-beta-20250427-132304-6da95c55",
30
- "@abtnode/models": "1.16.43-beta-20250427-132304-6da95c55",
31
- "@abtnode/queue": "1.16.43-beta-20250427-132304-6da95c55",
32
- "@abtnode/rbac": "1.16.43-beta-20250427-132304-6da95c55",
33
- "@abtnode/router-provider": "1.16.43-beta-20250427-132304-6da95c55",
34
- "@abtnode/static-server": "1.16.43-beta-20250427-132304-6da95c55",
35
- "@abtnode/timemachine": "1.16.43-beta-20250427-132304-6da95c55",
36
- "@abtnode/util": "1.16.43-beta-20250427-132304-6da95c55",
22
+ "@abtnode/analytics": "1.16.43-beta-20250429-130236-269254ff",
23
+ "@abtnode/auth": "1.16.43-beta-20250429-130236-269254ff",
24
+ "@abtnode/certificate-manager": "1.16.43-beta-20250429-130236-269254ff",
25
+ "@abtnode/client": "1.16.43-beta-20250429-130236-269254ff",
26
+ "@abtnode/constant": "1.16.43-beta-20250429-130236-269254ff",
27
+ "@abtnode/cron": "1.16.43-beta-20250429-130236-269254ff",
28
+ "@abtnode/docker-utils": "1.16.43-beta-20250429-130236-269254ff",
29
+ "@abtnode/logger": "1.16.43-beta-20250429-130236-269254ff",
30
+ "@abtnode/models": "1.16.43-beta-20250429-130236-269254ff",
31
+ "@abtnode/queue": "1.16.43-beta-20250429-130236-269254ff",
32
+ "@abtnode/rbac": "1.16.43-beta-20250429-130236-269254ff",
33
+ "@abtnode/router-provider": "1.16.43-beta-20250429-130236-269254ff",
34
+ "@abtnode/static-server": "1.16.43-beta-20250429-130236-269254ff",
35
+ "@abtnode/timemachine": "1.16.43-beta-20250429-130236-269254ff",
36
+ "@abtnode/util": "1.16.43-beta-20250429-130236-269254ff",
37
37
  "@arcblock/did": "1.20.2",
38
38
  "@arcblock/did-auth": "1.20.2",
39
39
  "@arcblock/did-ext": "^1.20.2",
@@ -44,15 +44,15 @@
44
44
  "@arcblock/pm2-events": "^0.0.5",
45
45
  "@arcblock/validator": "^1.20.2",
46
46
  "@arcblock/vc": "1.20.2",
47
- "@blocklet/constant": "1.16.43-beta-20250427-132304-6da95c55",
47
+ "@blocklet/constant": "1.16.43-beta-20250429-130236-269254ff",
48
48
  "@blocklet/did-space-js": "^1.0.48",
49
- "@blocklet/env": "1.16.43-beta-20250427-132304-6da95c55",
49
+ "@blocklet/env": "1.16.43-beta-20250429-130236-269254ff",
50
50
  "@blocklet/error": "^0.2.4",
51
- "@blocklet/meta": "1.16.43-beta-20250427-132304-6da95c55",
52
- "@blocklet/resolver": "1.16.43-beta-20250427-132304-6da95c55",
53
- "@blocklet/sdk": "1.16.43-beta-20250427-132304-6da95c55",
54
- "@blocklet/store": "1.16.43-beta-20250427-132304-6da95c55",
55
- "@blocklet/theme": "^2.13.12",
51
+ "@blocklet/meta": "1.16.43-beta-20250429-130236-269254ff",
52
+ "@blocklet/resolver": "1.16.43-beta-20250429-130236-269254ff",
53
+ "@blocklet/sdk": "1.16.43-beta-20250429-130236-269254ff",
54
+ "@blocklet/store": "1.16.43-beta-20250429-130236-269254ff",
55
+ "@blocklet/theme": "^2.13.14",
56
56
  "@fidm/x509": "^1.2.1",
57
57
  "@ocap/mcrypto": "1.20.2",
58
58
  "@ocap/util": "1.20.2",
@@ -116,5 +116,5 @@
116
116
  "jest": "^29.7.0",
117
117
  "unzipper": "^0.10.11"
118
118
  },
119
- "gitHead": "9df10dcb3135a528912241e7fc1ed54171bfeb03"
119
+ "gitHead": "0826633a53695ac92965f8993e46985259adb65f"
120
120
  }