@abtnode/core 1.16.29-beta-87e06e1c → 1.16.29-beta-112566d5

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
 
@@ -2265,7 +2266,6 @@ class DiskBlockletManager extends BaseBlockletManager {
2265
2266
  async updateAutoBackup({ did, autoBackup }, context) {
2266
2267
  /** @type {import('@abtnode/client').AutoBackup} */
2267
2268
  const value = { ...autoBackup };
2268
- await states.blockletExtras.setSettings(did, { autoBackup: value });
2269
2269
 
2270
2270
  const jobId = getBackupJobId(did);
2271
2271
  await this.backupQueue.delete(jobId);
@@ -2273,6 +2273,12 @@ class DiskBlockletManager extends BaseBlockletManager {
2273
2273
  logger.info('updateAutoBackup.$value', value);
2274
2274
 
2275
2275
  if (value.enabled) {
2276
+ const blocklet = await states.blocklet.getBlocklet(did);
2277
+ const backupEndpoint = getBackupEndpoint(blocklet?.environments);
2278
+ if (isEmpty(backupEndpoint)) {
2279
+ throw new Error(translate(context?.user?.locale, 'backup.space.unableEnableAutoBackup'));
2280
+ }
2281
+
2276
2282
  this.backupQueue.push(
2277
2283
  {
2278
2284
  entity: 'blocklet',
@@ -2285,6 +2291,8 @@ class DiskBlockletManager extends BaseBlockletManager {
2285
2291
  BACKUPS.JOB.INTERVAL
2286
2292
  );
2287
2293
  }
2294
+
2295
+ await states.blockletExtras.setSettings(did, { autoBackup: value });
2288
2296
  }
2289
2297
 
2290
2298
  /**
@@ -2797,6 +2805,18 @@ class DiskBlockletManager extends BaseBlockletManager {
2797
2805
  return;
2798
2806
  }
2799
2807
 
2808
+ const spaceGateways = await this.getBlockletSpaceGateways({ did });
2809
+ const backupEndpoint = getBackupEndpoint(blocklet.environments);
2810
+ if (isEmpty(spaceGateways) || isEmpty(backupEndpoint)) {
2811
+ logger.warn('Canceled automatic backups because there is no space gateway.', { appPid });
2812
+
2813
+ const jobId = getBackupJobId(did);
2814
+ await this.backupQueue.delete(jobId);
2815
+ await this.updateAutoBackup({ did, autoBackup: { enabled: false } }, context);
2816
+
2817
+ return;
2818
+ }
2819
+
2800
2820
  const {
2801
2821
  user: { did: userDid, locale },
2802
2822
  } = context;
@@ -2823,7 +2843,7 @@ class DiskBlockletManager extends BaseBlockletManager {
2823
2843
  userDid,
2824
2844
  strategy: backupState?.strategy,
2825
2845
  sourceUrl: path.join(this.dataDirs.tmp, 'backup', appDid),
2826
- targetName: await getSpaceNameByEndpoint(getBackupEndpoint(blocklet.environments), 'DID Space'),
2846
+ targetName: await getSpaceNameByEndpoint(backupEndpoint, 'DID Space'),
2827
2847
  });
2828
2848
  }
2829
2849
 
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
  };
@@ -1503,6 +1503,16 @@ const validateAppConfig = async (config, states) => {
1503
1503
  }
1504
1504
  }
1505
1505
 
1506
+ if (x.key === BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_URL) {
1507
+ if (isEmpty(x.value)) {
1508
+ throw new Error(`${x.key} can not be empty`);
1509
+ }
1510
+
1511
+ if (!isUrl(x.value)) {
1512
+ throw new Error(`${x.key}(${x.value}) is not a valid URL`);
1513
+ }
1514
+ }
1515
+
1506
1516
  if (x.key === BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_NAME) {
1507
1517
  x.value = await titleSchema.validateAsync(x.value);
1508
1518
  }
@@ -1545,7 +1555,7 @@ const validateAppConfig = async (config, states) => {
1545
1555
  if (x.key === BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_SPACE_ENDPOINT) {
1546
1556
  // @note: value 置空以表删除
1547
1557
  if (x.value && !isUrl(x.value)) {
1548
- throw new Error(`${x.key}(${x.value}) is not a valid http address`);
1558
+ throw new Error(`${x.key}(${x.value}) is not a valid URL`);
1549
1559
  }
1550
1560
  }
1551
1561
 
@@ -1555,17 +1565,18 @@ const validateAppConfig = async (config, states) => {
1555
1565
  }
1556
1566
 
1557
1567
  if (!isUrl(x.value)) {
1558
- throw new Error(`${x.key}(${x.value}) is not a valid http address`);
1568
+ throw new Error(`${x.key}(${x.value}) is not a valid URL`);
1559
1569
  }
1560
1570
  }
1561
1571
 
1562
1572
  if (x.key === BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_BACKUP_ENDPOINT) {
1573
+ // @note: value 置空以表删除
1563
1574
  if (isEmpty(x.value)) {
1564
- throw new Error(`${x.key} can not be empty`);
1575
+ x.value = '';
1565
1576
  }
1566
1577
 
1567
- if (!isUrl(x.value)) {
1568
- throw new Error(`${x.key}(${x.value}) is not a valid http address`);
1578
+ if (!isEmpty(x.value) && !isUrl(x.value)) {
1579
+ throw new Error(`${x.key}(${x.value}) is not a valid URL`);
1569
1580
  }
1570
1581
  }
1571
1582
  };
@@ -173,13 +173,38 @@ const consumeLauncherSession = async ({ params, blocklet }) => {
173
173
  }
174
174
  };
175
175
 
176
- const setupAppOwner = async (node, sessionId) => {
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) => {
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
@@ -292,13 +317,39 @@ const setupAppOwner = async (node, sessionId) => {
292
317
  expiresIn: '1d',
293
318
  });
294
319
 
295
- await node.setBlockletOwner({ did: appDid, owner: { did: ownerDid, pk: ownerPk } });
320
+ if (justCreate) {
321
+ await node.setBlockletInitialized({ did: appDid, owner: { did: ownerDid, pk: ownerPk } });
322
+ } else {
323
+ await node.setBlockletOwner({ did: appDid, owner: { did: ownerDid, pk: ownerPk } });
324
+ }
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 });
296
346
 
297
347
  return {
298
348
  session,
299
349
  blocklet,
300
350
  setupToken,
301
351
  passport: vc,
352
+ visitorId: userSession?.visitorId,
302
353
  };
303
354
  };
304
355
 
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.29-beta-87e06e1c",
6
+ "version": "1.16.29-beta-112566d5",
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-87e06e1c",
23
- "@abtnode/auth": "1.16.29-beta-87e06e1c",
24
- "@abtnode/certificate-manager": "1.16.29-beta-87e06e1c",
25
- "@abtnode/constant": "1.16.29-beta-87e06e1c",
26
- "@abtnode/cron": "1.16.29-beta-87e06e1c",
27
- "@abtnode/logger": "1.16.29-beta-87e06e1c",
28
- "@abtnode/models": "1.16.29-beta-87e06e1c",
29
- "@abtnode/queue": "1.16.29-beta-87e06e1c",
30
- "@abtnode/rbac": "1.16.29-beta-87e06e1c",
31
- "@abtnode/router-provider": "1.16.29-beta-87e06e1c",
32
- "@abtnode/static-server": "1.16.29-beta-87e06e1c",
33
- "@abtnode/timemachine": "1.16.29-beta-87e06e1c",
34
- "@abtnode/util": "1.16.29-beta-87e06e1c",
22
+ "@abtnode/analytics": "1.16.29-beta-112566d5",
23
+ "@abtnode/auth": "1.16.29-beta-112566d5",
24
+ "@abtnode/certificate-manager": "1.16.29-beta-112566d5",
25
+ "@abtnode/constant": "1.16.29-beta-112566d5",
26
+ "@abtnode/cron": "1.16.29-beta-112566d5",
27
+ "@abtnode/logger": "1.16.29-beta-112566d5",
28
+ "@abtnode/models": "1.16.29-beta-112566d5",
29
+ "@abtnode/queue": "1.16.29-beta-112566d5",
30
+ "@abtnode/rbac": "1.16.29-beta-112566d5",
31
+ "@abtnode/router-provider": "1.16.29-beta-112566d5",
32
+ "@abtnode/static-server": "1.16.29-beta-112566d5",
33
+ "@abtnode/timemachine": "1.16.29-beta-112566d5",
34
+ "@abtnode/util": "1.16.29-beta-112566d5",
35
35
  "@arcblock/did": "1.18.126",
36
36
  "@arcblock/did-auth": "1.18.126",
37
37
  "@arcblock/did-ext": "^1.18.126",
@@ -42,12 +42,12 @@
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-87e06e1c",
46
- "@blocklet/env": "1.16.29-beta-87e06e1c",
47
- "@blocklet/meta": "1.16.29-beta-87e06e1c",
48
- "@blocklet/resolver": "1.16.29-beta-87e06e1c",
49
- "@blocklet/sdk": "1.16.29-beta-87e06e1c",
50
- "@blocklet/store": "1.16.29-beta-87e06e1c",
45
+ "@blocklet/constant": "1.16.29-beta-112566d5",
46
+ "@blocklet/env": "1.16.29-beta-112566d5",
47
+ "@blocklet/meta": "1.16.29-beta-112566d5",
48
+ "@blocklet/resolver": "1.16.29-beta-112566d5",
49
+ "@blocklet/sdk": "1.16.29-beta-112566d5",
50
+ "@blocklet/store": "1.16.29-beta-112566d5",
51
51
  "@did-space/client": "^0.5.4",
52
52
  "@fidm/x509": "^1.2.1",
53
53
  "@ocap/mcrypto": "1.18.126",
@@ -103,5 +103,5 @@
103
103
  "jest": "^29.7.0",
104
104
  "unzipper": "^0.10.11"
105
105
  },
106
- "gitHead": "e6a32801bc392566448d4df00c2ae68717f39822"
106
+ "gitHead": "4c6213560b79dc862b0b5e48b50f65c39de54aef"
107
107
  }