@abtnode/core 1.16.52-beta-20251005-235515-42ad5caf → 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.
@@ -482,12 +482,13 @@ class BlockletState extends BaseState {
482
482
 
483
483
  await forEachComponentV2(blocklet, async (component) => {
484
484
  if (!shouldSkipComponent(component.meta.did, componentDids)) {
485
- component[isGreen ? 'greenPorts' : 'ports'] = await refreshPorts(
486
- component[isGreen ? 'greenPorts' : 'ports'] || component.ports,
487
- {
488
- blackList: [...occupiedExternalPorts.keys(), ...occupiedInternalPorts.keys()],
489
- }
490
- );
485
+ let oldPorts = component[isGreen ? 'greenPorts' : 'ports'];
486
+ if (!oldPorts || Object.keys(oldPorts).length === 0) {
487
+ oldPorts = component.ports;
488
+ }
489
+ component[isGreen ? 'greenPorts' : 'ports'] = await refreshPorts(oldPorts, {
490
+ blackList: [...occupiedExternalPorts.keys(), ...occupiedInternalPorts.keys()],
491
+ });
491
492
  }
492
493
  });
493
494
 
package/lib/states/org.js CHANGED
@@ -167,21 +167,23 @@ class OrgState extends BaseState {
167
167
 
168
168
  // @FIXME: LiuShuang 这里没必要返回 owner 的信息, 可以直接通过 ownerDid 查询 owner 的信息
169
169
  const result = await this.paginate({ where, replacements }, { updatedAt: -1 }, paging);
170
+ const { includeMembers = true, includePassports = true } = payload.options || {};
171
+ if (includeMembers) {
172
+ // 查询每个 org 中的用户信息, 在org 列表页没必要查询全部
173
+ const orgMembers = await Promise.all(
174
+ result.list.map((org) => this.getOrgMembers({ orgId: org.id, paging: { page: 1, pageSize: 5 } }, context))
175
+ );
170
176
 
171
- // 查询每个 org 中的用户信息, 在org 列表页没必要查询全部
172
- const orgMembers = await Promise.all(
173
- result.list.map((org) => this.getOrgMembers({ orgId: org.id, paging: { page: 1, pageSize: 5 } }, context))
174
- );
175
-
176
- result.list.forEach((org, index) => {
177
- const itme = orgMembers[index];
178
- org.members = itme.users;
179
- org.membersCount = itme.paging.total;
180
- });
177
+ result.list.forEach((org, index) => {
178
+ const item = orgMembers[index];
179
+ org.members = item.users;
180
+ org.membersCount = item.paging.total;
181
+ });
182
+ }
181
183
 
182
184
  // 查询用户的 passport
183
185
  let passports = [];
184
- if (['joined', 'all'].includes(payload.type)) {
186
+ if (['joined', 'all'].includes(payload.type) && includePassports) {
185
187
  passports = await this.passport.find({
186
188
  where: { userDid: quertUserDid },
187
189
  });
@@ -56,7 +56,7 @@ const {
56
56
  filterRequiredComponents,
57
57
  } = require('@blocklet/resolver');
58
58
  const formatBackSlash = require('@abtnode/util/lib/format-back-slash');
59
- const { isPortsOccupiedByOtherProcess, killProcessOccupiedPorts } = require('@abtnode/util/lib/port');
59
+ const { killProcessOccupiedPorts, isPortTaken } = require('@abtnode/util/lib/port');
60
60
  const { getComponentApiKey } = require('@abtnode/util/lib/blocklet');
61
61
  const { toSvg: createDidLogo } = require('@arcblock/did-motif');
62
62
  const { createBlockiesSvg } = require('@blocklet/meta/lib/blockies');
@@ -2337,56 +2337,61 @@ const shouldSkipComponent = (componentDid, whiteList) => {
2337
2337
  return !arr.includes(componentDid);
2338
2338
  };
2339
2339
 
2340
- const ensureAppPortsNotOccupied = async ({
2341
- blocklet,
2342
- componentDids: inputDids,
2343
- states,
2344
- manager,
2345
- checkPortsFn = isPortsOccupiedByOtherProcess,
2346
- isGreen = false,
2347
- }) => {
2340
+ const ensurePortsShape = (states, portsA, portsB) => {
2341
+ if (!portsA || Object.keys(portsA).length === 0) {
2342
+ return;
2343
+ }
2344
+ if (Object.keys(portsB).length === 0) {
2345
+ for (const key of Object.keys(portsA)) {
2346
+ portsB[key] = portsA[key];
2347
+ }
2348
+ }
2349
+ };
2350
+
2351
+ const ensureAppPortsNotOccupied = async ({ blocklet, componentDids: inputDids, states, manager, isGreen = false }) => {
2348
2352
  const { did } = blocklet.meta;
2349
- const dids = new Set();
2353
+ const occupiedDids = new Set();
2354
+
2350
2355
  await forEachComponentV2(blocklet, async (b) => {
2351
2356
  try {
2352
- if (shouldSkipComponent(b.meta.did, inputDids)) {
2353
- return;
2357
+ if (shouldSkipComponent(b.meta.did, inputDids)) return;
2358
+
2359
+ if (!b.greenPorts) {
2360
+ b.greenPorts = {};
2354
2361
  }
2355
- const { processId } = b.env;
2356
- const { ports, greenPorts } = b;
2362
+ const { ports = {}, greenPorts } = b;
2363
+ ensurePortsShape(states, ports, greenPorts);
2364
+
2365
+ const targetPorts = isGreen ? greenPorts : ports;
2357
2366
 
2358
- if (
2359
- await checkPortsFn({
2360
- ports: greenPorts || ports,
2361
- pm2ProcessId: isGreen ? `${processId}-green` : processId,
2362
- printError: logger.error.bind(logger),
2363
- })
2364
- ) {
2365
- dids.add(b.meta.did);
2367
+ let currentOccupied = false;
2368
+ for (const port of Object.values(targetPorts)) {
2369
+ currentOccupied = await isPortTaken(port);
2370
+ if (currentOccupied) {
2371
+ break;
2372
+ }
2366
2373
  }
2367
- if (
2368
- await checkPortsFn({
2369
- ports,
2370
- pm2ProcessId: !isGreen ? `${processId}-green` : processId,
2371
- printError: logger.error.bind(logger),
2372
- })
2373
- ) {
2374
- dids.add(b.meta.did);
2374
+
2375
+ if (currentOccupied) {
2376
+ occupiedDids.add(b.meta.did);
2375
2377
  }
2376
2378
  } catch (error) {
2377
- logger.error('Failed to check ports occupied', { error });
2379
+ logger.error('Failed to check ports occupied', { error, blockletDid: b.meta.did, isGreen });
2378
2380
  }
2379
2381
  });
2380
2382
 
2381
- let newBlocklet = blocklet;
2382
- const componentDids = Array.from(dids);
2383
- if (componentDids.length) {
2384
- await states.blocklet.refreshBlockletPorts(did, componentDids, isGreen);
2385
- logger.info('refresh component ports', { did, componentDids });
2386
- await manager._updateBlockletEnvironment(did);
2387
- newBlocklet = await manager.ensureBlocklet(did);
2383
+ if (occupiedDids.size === 0) {
2384
+ logger.info('No occupied ports detected, no refresh needed');
2385
+ return blocklet;
2388
2386
  }
2389
2387
 
2388
+ const componentDids = Array.from(occupiedDids);
2389
+ await states.blocklet.refreshBlockletPorts(did, componentDids, isGreen);
2390
+ logger.info('Refreshed component ports due to conflict', { did, componentDids });
2391
+
2392
+ await manager._updateBlockletEnvironment(did);
2393
+ const newBlocklet = await manager.ensureBlocklet(did);
2394
+
2390
2395
  return newBlocklet;
2391
2396
  };
2392
2397
 
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.52-beta-20251005-235515-42ad5caf",
6
+ "version": "1.16.52-beta-20251008-091027-c46c73e3",
7
7
  "description": "",
8
8
  "main": "lib/index.js",
9
9
  "files": [
@@ -14,27 +14,28 @@
14
14
  "lint:fix": "eslint --fix tests lib",
15
15
  "test": "node tools/jest.js",
16
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-20251005-235515-42ad5caf",
24
- "@abtnode/auth": "1.16.52-beta-20251005-235515-42ad5caf",
25
- "@abtnode/certificate-manager": "1.16.52-beta-20251005-235515-42ad5caf",
26
- "@abtnode/constant": "1.16.52-beta-20251005-235515-42ad5caf",
27
- "@abtnode/cron": "1.16.52-beta-20251005-235515-42ad5caf",
28
- "@abtnode/db-cache": "1.16.52-beta-20251005-235515-42ad5caf",
29
- "@abtnode/docker-utils": "1.16.52-beta-20251005-235515-42ad5caf",
30
- "@abtnode/logger": "1.16.52-beta-20251005-235515-42ad5caf",
31
- "@abtnode/models": "1.16.52-beta-20251005-235515-42ad5caf",
32
- "@abtnode/queue": "1.16.52-beta-20251005-235515-42ad5caf",
33
- "@abtnode/rbac": "1.16.52-beta-20251005-235515-42ad5caf",
34
- "@abtnode/router-provider": "1.16.52-beta-20251005-235515-42ad5caf",
35
- "@abtnode/static-server": "1.16.52-beta-20251005-235515-42ad5caf",
36
- "@abtnode/timemachine": "1.16.52-beta-20251005-235515-42ad5caf",
37
- "@abtnode/util": "1.16.52-beta-20251005-235515-42ad5caf",
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,15 +47,15 @@
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-20251005-235515-42ad5caf",
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-20251005-235515-42ad5caf",
52
+ "@blocklet/env": "1.16.52-beta-20251008-091027-c46c73e3",
52
53
  "@blocklet/error": "^0.2.5",
53
- "@blocklet/meta": "1.16.52-beta-20251005-235515-42ad5caf",
54
- "@blocklet/resolver": "1.16.52-beta-20251005-235515-42ad5caf",
55
- "@blocklet/sdk": "1.16.52-beta-20251005-235515-42ad5caf",
56
- "@blocklet/server-js": "1.16.52-beta-20251005-235515-42ad5caf",
57
- "@blocklet/store": "1.16.52-beta-20251005-235515-42ad5caf",
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",
58
59
  "@blocklet/theme": "^3.1.45",
59
60
  "@fidm/x509": "^1.2.1",
60
61
  "@ocap/mcrypto": "1.25.6",
@@ -119,5 +120,5 @@
119
120
  "jest": "^29.7.0",
120
121
  "unzipper": "^0.10.11"
121
122
  },
122
- "gitHead": "7b295929a123edac2cb292c43f2edda0d3e3e6b8"
123
+ "gitHead": "2a8d239f019aece938d909a495ff1c54ad0e87a9"
123
124
  }