@abtnode/core 1.16.29-beta-2eaf40bc → 1.16.29-beta-cbfd116d

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.
@@ -206,6 +206,7 @@ const {
206
206
  connectByStudio,
207
207
  disconnectFromStore,
208
208
  } = require('../project');
209
+ const { translate } = require('../../locales');
209
210
 
210
211
  const { formatEnvironments, getBlockletMeta, validateOwner, isCLI } = util;
211
212
 
@@ -1348,17 +1349,31 @@ class DiskBlockletManager extends BaseBlockletManager {
1348
1349
  }
1349
1350
  }
1350
1351
 
1351
- // eslint-disable-next-line no-unused-vars
1352
- async deleteProcess({ did, componentDids }, context) {
1352
+ /**
1353
+ *
1354
+ * @param {object} param - params
1355
+ * @param {string} param.did - blocklet did
1356
+ * @param {string[]} param.componentDids - component dids
1357
+ * @param {boolean} param.shouldUpdateBlockletStatus - should update blocklet status
1358
+ * @param {*} context
1359
+ * @returns
1360
+ */
1361
+ async deleteProcess({ did, componentDids, shouldUpdateBlockletStatus = true }, context) {
1353
1362
  const blocklet = await this.getBlocklet(did);
1354
1363
 
1355
1364
  logger.info('delete blocklet process', { did, componentDids });
1356
1365
 
1357
1366
  await deleteBlockletProcess(blocklet, { ...context, componentDids });
1358
-
1359
- const result = await states.blocklet.setBlockletStatus(did, BlockletStatus.stopped, { componentDids });
1360
1367
  logger.info('blocklet process deleted successfully', { did, componentDids });
1361
- return result;
1368
+
1369
+ // 有些情况不需要更新 blocklet 状态, 比如下载完成,安装之前清理 process 时, 不需要更新 blocklet 状态
1370
+ if (shouldUpdateBlockletStatus) {
1371
+ const result = await states.blocklet.setBlockletStatus(did, BlockletStatus.stopped, { componentDids });
1372
+ logger.info('blocklet status updated to stopped after deleted processes', { did, componentDids });
1373
+ return result;
1374
+ }
1375
+
1376
+ return blocklet;
1362
1377
  }
1363
1378
 
1364
1379
  // Get blocklet by blockletDid or appDid
@@ -2265,7 +2280,6 @@ class DiskBlockletManager extends BaseBlockletManager {
2265
2280
  async updateAutoBackup({ did, autoBackup }, context) {
2266
2281
  /** @type {import('@abtnode/client').AutoBackup} */
2267
2282
  const value = { ...autoBackup };
2268
- await states.blockletExtras.setSettings(did, { autoBackup: value });
2269
2283
 
2270
2284
  const jobId = getBackupJobId(did);
2271
2285
  await this.backupQueue.delete(jobId);
@@ -2273,6 +2287,12 @@ class DiskBlockletManager extends BaseBlockletManager {
2273
2287
  logger.info('updateAutoBackup.$value', value);
2274
2288
 
2275
2289
  if (value.enabled) {
2290
+ const blocklet = await states.blocklet.getBlocklet(did);
2291
+ const backupEndpoint = getBackupEndpoint(blocklet?.environments);
2292
+ if (isEmpty(backupEndpoint)) {
2293
+ throw new Error(translate(context?.user?.locale, 'backup.space.unableEnableAutoBackup'));
2294
+ }
2295
+
2276
2296
  this.backupQueue.push(
2277
2297
  {
2278
2298
  entity: 'blocklet',
@@ -2285,6 +2305,8 @@ class DiskBlockletManager extends BaseBlockletManager {
2285
2305
  BACKUPS.JOB.INTERVAL
2286
2306
  );
2287
2307
  }
2308
+
2309
+ await states.blockletExtras.setSettings(did, { autoBackup: value });
2288
2310
  }
2289
2311
 
2290
2312
  /**
@@ -2797,6 +2819,18 @@ class DiskBlockletManager extends BaseBlockletManager {
2797
2819
  return;
2798
2820
  }
2799
2821
 
2822
+ const spaceGateways = await this.getBlockletSpaceGateways({ did });
2823
+ const backupEndpoint = getBackupEndpoint(blocklet.environments);
2824
+ if (isEmpty(spaceGateways) || isEmpty(backupEndpoint)) {
2825
+ logger.warn('Canceled automatic backups because there is no space gateway.', { appPid });
2826
+
2827
+ const jobId = getBackupJobId(did);
2828
+ await this.backupQueue.delete(jobId);
2829
+ await this.updateAutoBackup({ did, autoBackup: { enabled: false } }, context);
2830
+
2831
+ return;
2832
+ }
2833
+
2800
2834
  const {
2801
2835
  user: { did: userDid, locale },
2802
2836
  } = context;
@@ -2823,7 +2857,7 @@ class DiskBlockletManager extends BaseBlockletManager {
2823
2857
  userDid,
2824
2858
  strategy: backupState?.strategy,
2825
2859
  sourceUrl: path.join(this.dataDirs.tmp, 'backup', appDid),
2826
- targetName: await getSpaceNameByEndpoint(getBackupEndpoint(blocklet.environments), 'DID Space'),
2860
+ targetName: await getSpaceNameByEndpoint(backupEndpoint, 'DID Space'),
2827
2861
  });
2828
2862
  }
2829
2863
 
@@ -3239,7 +3273,9 @@ class DiskBlockletManager extends BaseBlockletManager {
3239
3273
  return null;
3240
3274
  }
3241
3275
 
3242
- blocklet.site.domainAliases = await this.getDomainAliases(blocklet, context);
3276
+ if (blocklet.site) {
3277
+ blocklet.site.domainAliases = await this.getDomainAliases(blocklet, context);
3278
+ }
3243
3279
 
3244
3280
  // app runtime info, app status
3245
3281
  blocklet.appRuntimeInfo = this.runtimeMonitor.getRuntimeInfo(blocklet.meta.did);
@@ -3429,7 +3465,7 @@ class DiskBlockletManager extends BaseBlockletManager {
3429
3465
 
3430
3466
  // ensure delete process
3431
3467
  try {
3432
- await this.deleteProcess({ did }, context);
3468
+ await this.deleteProcess({ did, shouldUpdateBlockletStatus: false }, context);
3433
3469
  logger.info('ensure delete blocklet process for installing', { did, name: meta.name });
3434
3470
  } catch (err) {
3435
3471
  logger.error('ensure delete blocklet process failed for installing', { did, name: meta.name, error: err });
package/lib/locales/ar.js CHANGED
@@ -12,6 +12,7 @@ module.exports = {
12
12
  },
13
13
  isFull: 'المساحة الحالية لتخزين المساحة ممتلئة ، يرجى توسيع المساحة وعمل نسخة احتياطية مرة أخرى.',
14
14
  lackOfSpace: 'المساحة المتاحة حاليًا في التخزين غير كافية. يرجى توسيع المساحة وإجراء النسخ الاحتياطي مرة أخرى.',
15
+ unableEnableAutoBackup: 'يتعذر تمكين النسخ الاحتياطي التلقائي، يرجى الاتصال بمساحات DID أولاً',
15
16
  },
16
17
  },
17
18
  };
package/lib/locales/de.js CHANGED
@@ -14,6 +14,8 @@ module.exports = {
14
14
  'Der aktuelle Speicherplatz im Space ist voll. Bitte erweitern Sie den Speicherplatz und machen Sie ein Backup.',
15
15
  lackOfSpace:
16
16
  'Der derzeit verfügbare Speicherplatz ist unzureichend. Bitte erweitern Sie den Speicherplatz und führen Sie das Backup erneut durch.',
17
+ unableEnableAutoBackup:
18
+ 'Automatisches Backup nicht aktivierbar. Stelle zuerst eine Verbindung mit DID Spaces her.',
17
19
  },
18
20
  },
19
21
  };
package/lib/locales/en.js CHANGED
@@ -13,6 +13,7 @@ module.exports = {
13
13
  isFull: 'The current Space storage space is full, please expand the space and back up again',
14
14
  lackOfSpace:
15
15
  'The current available space in the storage is insufficient, Please expand the space and perform the backup again',
16
+ unableEnableAutoBackup: 'unable to enable auto backup, please connect to DID Spaces first',
16
17
  },
17
18
  },
18
19
  };
package/lib/locales/es.js CHANGED
@@ -14,6 +14,8 @@ module.exports = {
14
14
  'El espacio de almacenamiento actual de Space está lleno, por favor amplía el espacio y haz una copia de seguridad nuevamente',
15
15
  lackOfSpace:
16
16
  'El espacio disponible actual en el almacenamiento es insuficiente. Por favor, amplíe el espacio y realice la copia de seguridad nuevamente.',
17
+ unableEnableAutoBackup:
18
+ 'no se puede habilitar la copia de seguridad automática, conéctese primero a los espacios DID',
17
19
  },
18
20
  },
19
21
  };
package/lib/locales/fr.js CHANGED
@@ -14,6 +14,8 @@ module.exports = {
14
14
  "L'espace de stockage actuel de l'espace est plein, veuillez étendre l'espace et effectuer une sauvegarde à nouveau.",
15
15
  lackOfSpace:
16
16
  "L'espace disponible actuel dans le stockage est insuffisant. Veuillez étendre l'espace et effectuer à nouveau la sauvegarde.",
17
+ unableEnableAutoBackup:
18
+ "Impossible d'activer la sauvegarde automatique. Veuillez d'abord vous connecter à DID Spaces.",
17
19
  },
18
20
  },
19
21
  };
package/lib/locales/hi.js CHANGED
@@ -12,6 +12,7 @@ module.exports = {
12
12
  },
13
13
  isFull: 'वर्तमान अंतरिक्ष संग्रहण स्थान भरा हुआ है, कृपया स्थान का विस्तार करें और फिर से बैकअप बनाएं।',
14
14
  lackOfSpace: 'उपलब्ध भंडारण में वर्तमान में कमी है, कृपया स्थान बढ़ाएं और पुनः बैकअप करें',
15
+ unableEnableAutoBackup: 'ऑटो बैकअप सक्षम नहीं हो पाया है, कृपया पहले DID Spaces से कनेक्ट करें',
15
16
  },
16
17
  },
17
18
  };
Binary file
package/lib/locales/id.js CHANGED
@@ -13,6 +13,8 @@ module.exports = {
13
13
  isFull: 'Ruang penyimpanan Space saat ini penuh, silakan perluas ruang dan buat cadangan lagi',
14
14
  lackOfSpace:
15
15
  'Ruang yang tersedia saat ini di penyimpanan tidak mencukupi. Mohon perluas ruang dan lakukan backup lagi.',
16
+ unableEnableAutoBackup:
17
+ 'Tidak dapat mengaktifkan pencadangan otomatis, harap sambungkan ke DID Spaces terlebih dahulu',
16
18
  },
17
19
  },
18
20
  };
package/lib/locales/ja.js CHANGED
@@ -13,6 +13,7 @@ module.exports = {
13
13
  isFull: '現在のSpaceのストレージスペースはいっぱいです。スペースを拡張して、もう一度バックアップしてください',
14
14
  lackOfSpace:
15
15
  '現在のストレージの利用可能なスペースは不十分です。スペースを拡張してバックアップを再実行してください。',
16
+ unableEnableAutoBackup: '自動バックアップを有効化できません。最初に DID スペースに接続してください',
16
17
  },
17
18
  },
18
19
  };
package/lib/locales/ko.js CHANGED
@@ -12,6 +12,7 @@ module.exports = {
12
12
  },
13
13
  isFull: '현재 Space 저장 공간이 가득 찼습니다. 공간을 확장하고 다시 백업해주세요',
14
14
  lackOfSpace: '현재 사용 가능한 저장 공간이 부족합니다. 공간을 확장하고 백업을 다시 실행하세요.',
15
+ unableEnableAutoBackup: '자동 백업을 사용할 수 없습니다. 먼저 DID 공간에 연결하세요.',
15
16
  },
16
17
  },
17
18
  };
package/lib/locales/pt.js CHANGED
@@ -14,6 +14,7 @@ module.exports = {
14
14
  'O espaço de armazenamento atual do Espaço está cheio, por favor, expanda o espaço e faça backup novamente',
15
15
  lackOfSpace:
16
16
  'O espaço disponível atualmente no armazenamento é insuficiente. Por favor, expanda o espaço e execute o backup novamente.',
17
+ unableEnableAutoBackup: 'Não é possível habilitar o backup automático, conecte-se a Espaços DID primeiro',
17
18
  },
18
19
  },
19
20
  };
package/lib/locales/ru.js CHANGED
@@ -14,6 +14,8 @@ module.exports = {
14
14
  'Текущее пространство хранения Space заполнено, пожалуйста, расширьте пространство и создайте резервную копию снова.',
15
15
  lackOfSpace:
16
16
  'Текущее доступное пространство в хранилище недостаточно. Пожалуйста, расширьте пространство и выполните резервное копирование снова.',
17
+ unableEnableAutoBackup:
18
+ 'Не удается включить автоматическое резервное копирование. Сначала подключитесь к DID Spaces.',
17
19
  },
18
20
  },
19
21
  };
package/lib/locales/th.js CHANGED
@@ -12,6 +12,7 @@ module.exports = {
12
12
  },
13
13
  isFull: 'พื้นที่จัดเก็บ Space ปัจจุบันเต็มแล้ว โปรดขยายพื้นที่และสำรองข้อมูลอีกครั้ง',
14
14
  lackOfSpace: 'พื้นที่ว่างในการจัดเก็บปัจจุบันไม่เพียงพอ โปรดขยายพื้นที่และทำการสำรองข้อมูลอีกครั้ง',
15
+ unableEnableAutoBackup: 'ไม่สามารถเปิดใช้งานการสำรองข้อมูลอัตโนมัติได้ โปรดเชื่อมต่อกับ DID Spaces ก่อน',
15
16
  },
16
17
  },
17
18
  };
package/lib/locales/vi.js CHANGED
@@ -12,6 +12,7 @@ module.exports = {
12
12
  },
13
13
  isFull: 'Không gian lưu trữ hiện tại của không gian Đang đầy, vui lòng mở rộng không gian và sao lưu lại',
14
14
  lackOfSpace: 'Không gian lưu trữ hiện tại không đủ. Vui lòng mở rộng không gian và thực hiện sao lưu lại.',
15
+ unableEnableAutoBackup: 'Không thể bật sao lưu tự động, hãy kết nối với DID Spaces trước',
15
16
  },
16
17
  },
17
18
  };
@@ -11,6 +11,7 @@ module.exports = {
11
11
  },
12
12
  isFull: '當前 Space 儲存空間已滿,請擴展空間並再次備份',
13
13
  lackOfSpace: '儲存空間當前的可用空間不足,請擴展空間並重新進行備份。',
14
+ unableEnableAutoBackup: '無法啟用自動備份,請先連接到 DID 空間',
14
15
  },
15
16
  },
16
17
  };
package/lib/locales/zh.js CHANGED
@@ -11,6 +11,7 @@ module.exports = {
11
11
  },
12
12
  isFull: '当前的空间存储空间已满,请扩展空间并再次备份',
13
13
  lackOfSpace: '当前存储空间的可用空间不足, 请扩展空间后再次进行备份',
14
+ unableEnableAutoBackup: '无法开启自动备份,请先连接到 DID Spaces',
14
15
  },
15
16
  },
16
17
  };
@@ -392,6 +392,7 @@ class User extends ExtendBase {
392
392
  'fullName',
393
393
  'email',
394
394
  'avatar',
395
+ 'url',
395
396
  'role',
396
397
 
397
398
  'locale',
@@ -1570,11 +1570,12 @@ const validateAppConfig = async (config, states) => {
1570
1570
  }
1571
1571
 
1572
1572
  if (x.key === BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_BACKUP_ENDPOINT) {
1573
+ // @note: value 置空以表删除
1573
1574
  if (isEmpty(x.value)) {
1574
- throw new Error(`${x.key} can not be empty`);
1575
+ x.value = '';
1575
1576
  }
1576
1577
 
1577
- if (!isUrl(x.value)) {
1578
+ if (!isEmpty(x.value) && !isUrl(x.value)) {
1578
1579
  throw new Error(`${x.key}(${x.value}) is not a valid URL`);
1579
1580
  }
1580
1581
  }
@@ -173,13 +173,38 @@ const consumeLauncherSession = async ({ params, blocklet }) => {
173
173
  }
174
174
  };
175
175
 
176
- const setupAppOwner = async (node, sessionId, justCreate = false) => {
176
+ /**
177
+ *
178
+ * @param {object} param
179
+ * @param {object} param.node node instance
180
+ * @param {string} param.sessionId blocklet setup session id
181
+ * @param {boolean} param.justCreate just create owner, not set owner
182
+ * @param {object} param.context context
183
+ * @param {object} param.context.visitorId visitorId
184
+ * @param {object} param.context.ua ua
185
+ * @param {object} param.context.lastLoginIp lastLoginIp
186
+ * @param {object} param.context.walletOS walletOS
187
+ * @param {object} param.context.walletDeviceMessageToken walletDeviceMessageToken
188
+ * @param {object} param.context.walletDeviceId walletDeviceId
189
+ * @returns
190
+ */
191
+ const setupAppOwner = async ({ node, sessionId, justCreate = false, context }) => {
177
192
  const session = await node.getSession({ id: sessionId });
178
193
  if (!session) {
179
194
  throw new Error(`Blocklet setup session not found in server: ${sessionId}`);
180
195
  }
181
196
 
182
- const { appDid, userDid, ownerDid, ownerPk, lastLoginIp, context, locale, launcherUrl, launcherSessionId } = session;
197
+ const {
198
+ appDid,
199
+ userDid,
200
+ ownerDid,
201
+ ownerPk,
202
+ lastLoginIp,
203
+ context: sessionContext,
204
+ locale,
205
+ launcherUrl,
206
+ launcherSessionId,
207
+ } = session;
183
208
  const [info, blocklet] = await Promise.all([states.node.read(), states.blocklet.getBlocklet(appDid)]);
184
209
  if (!blocklet) {
185
210
  throw new Error(`Blocklet not found in server: ${appDid}`);
@@ -275,7 +300,7 @@ const setupAppOwner = async (node, sessionId, justCreate = false) => {
275
300
  {
276
301
  action: 'addUser',
277
302
  args: { teamDid: appDid, userDid: ownerDid, reason: 'launch blocklet' },
278
- context: { ...context, user: doc },
303
+ context: { ...sessionContext, user: doc },
279
304
  result: doc,
280
305
  },
281
306
  node
@@ -298,11 +323,33 @@ const setupAppOwner = async (node, sessionId, justCreate = false) => {
298
323
  await node.setBlockletOwner({ did: appDid, owner: { did: ownerDid, pk: ownerPk } });
299
324
  }
300
325
 
326
+ const userSession = await node
327
+ .upsertUserSession({
328
+ teamDid: appDid,
329
+ userDid: ownerDid,
330
+ appPid: appDid,
331
+ status: 'online',
332
+ visitorId: context?.visitorId,
333
+ ua: context?.ua,
334
+ lastLoginIp: context?.lastLoginIp,
335
+ extra: {
336
+ walletOS: context?.walletOS,
337
+ walletDeviceMessageToken: context?.walletDeviceMessageToken,
338
+ walletDeviceId: context?.walletDeviceId,
339
+ },
340
+ })
341
+ .catch((error) => {
342
+ logger.error('upsertUserSession failed', { error, appDid, ownerDid, context });
343
+ });
344
+
345
+ logger.info('created user session', { appDid, ownerDid, userSession });
346
+
301
347
  return {
302
348
  session,
303
349
  blocklet,
304
350
  setupToken,
305
351
  passport: vc,
352
+ visitorId: userSession?.visitorId,
306
353
  };
307
354
  };
308
355
 
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.29-beta-2eaf40bc",
6
+ "version": "1.16.29-beta-cbfd116d",
7
7
  "description": "",
8
8
  "main": "lib/index.js",
9
9
  "files": [
@@ -19,19 +19,19 @@
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.29-beta-2eaf40bc",
23
- "@abtnode/auth": "1.16.29-beta-2eaf40bc",
24
- "@abtnode/certificate-manager": "1.16.29-beta-2eaf40bc",
25
- "@abtnode/constant": "1.16.29-beta-2eaf40bc",
26
- "@abtnode/cron": "1.16.29-beta-2eaf40bc",
27
- "@abtnode/logger": "1.16.29-beta-2eaf40bc",
28
- "@abtnode/models": "1.16.29-beta-2eaf40bc",
29
- "@abtnode/queue": "1.16.29-beta-2eaf40bc",
30
- "@abtnode/rbac": "1.16.29-beta-2eaf40bc",
31
- "@abtnode/router-provider": "1.16.29-beta-2eaf40bc",
32
- "@abtnode/static-server": "1.16.29-beta-2eaf40bc",
33
- "@abtnode/timemachine": "1.16.29-beta-2eaf40bc",
34
- "@abtnode/util": "1.16.29-beta-2eaf40bc",
22
+ "@abtnode/analytics": "1.16.29-beta-cbfd116d",
23
+ "@abtnode/auth": "1.16.29-beta-cbfd116d",
24
+ "@abtnode/certificate-manager": "1.16.29-beta-cbfd116d",
25
+ "@abtnode/constant": "1.16.29-beta-cbfd116d",
26
+ "@abtnode/cron": "1.16.29-beta-cbfd116d",
27
+ "@abtnode/logger": "1.16.29-beta-cbfd116d",
28
+ "@abtnode/models": "1.16.29-beta-cbfd116d",
29
+ "@abtnode/queue": "1.16.29-beta-cbfd116d",
30
+ "@abtnode/rbac": "1.16.29-beta-cbfd116d",
31
+ "@abtnode/router-provider": "1.16.29-beta-cbfd116d",
32
+ "@abtnode/static-server": "1.16.29-beta-cbfd116d",
33
+ "@abtnode/timemachine": "1.16.29-beta-cbfd116d",
34
+ "@abtnode/util": "1.16.29-beta-cbfd116d",
35
35
  "@arcblock/did": "1.18.126",
36
36
  "@arcblock/did-auth": "1.18.126",
37
37
  "@arcblock/did-ext": "^1.18.126",
@@ -42,13 +42,13 @@
42
42
  "@arcblock/pm2-events": "^0.0.5",
43
43
  "@arcblock/validator": "^1.18.126",
44
44
  "@arcblock/vc": "1.18.126",
45
- "@blocklet/constant": "1.16.29-beta-2eaf40bc",
46
- "@blocklet/env": "1.16.29-beta-2eaf40bc",
47
- "@blocklet/meta": "1.16.29-beta-2eaf40bc",
48
- "@blocklet/resolver": "1.16.29-beta-2eaf40bc",
49
- "@blocklet/sdk": "1.16.29-beta-2eaf40bc",
50
- "@blocklet/store": "1.16.29-beta-2eaf40bc",
51
- "@did-space/client": "^0.5.4",
45
+ "@blocklet/constant": "1.16.29-beta-cbfd116d",
46
+ "@blocklet/env": "1.16.29-beta-cbfd116d",
47
+ "@blocklet/meta": "1.16.29-beta-cbfd116d",
48
+ "@blocklet/resolver": "1.16.29-beta-cbfd116d",
49
+ "@blocklet/sdk": "1.16.29-beta-cbfd116d",
50
+ "@blocklet/store": "1.16.29-beta-cbfd116d",
51
+ "@did-space/client": "^0.5.7",
52
52
  "@fidm/x509": "^1.2.1",
53
53
  "@ocap/mcrypto": "1.18.126",
54
54
  "@ocap/util": "1.18.126",
@@ -103,5 +103,5 @@
103
103
  "jest": "^29.7.0",
104
104
  "unzipper": "^0.10.11"
105
105
  },
106
- "gitHead": "d723d07ca8914468fc1b53af23aa53dc343e0a8c"
106
+ "gitHead": "e9bdb7af77f2d126e40195c67972b07fe683adf9"
107
107
  }