@abtnode/core 1.16.17-beta-5d4664f8 → 1.16.17-beta-ce49fe0e

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.
@@ -27,6 +27,7 @@ const {
27
27
  BLOCKLET_CACHE_TTL,
28
28
  MONITOR_RECORD_INTERVAL_SEC,
29
29
  INSTALL_ACTIONS,
30
+ BACKUPS,
30
31
  } = require('@abtnode/constant');
31
32
 
32
33
  const getBlockletEngine = require('@blocklet/meta/lib/engine');
@@ -211,6 +212,9 @@ class DiskBlockletManager extends BaseBlockletManager {
211
212
  this.installDir = dataDirs.blocklets;
212
213
  this.startQueue = startQueue;
213
214
  this.installQueue = installQueue;
215
+ /**
216
+ * @type {ReturnType<import('@abtnode/queue')>}
217
+ */
214
218
  this.backupQueue = backupQueue;
215
219
  this.restoreQueue = restoreQueue;
216
220
  this.teamManager = teamManager;
@@ -979,6 +983,7 @@ class DiskBlockletManager extends BaseBlockletManager {
979
983
  this.emit(BlockletEvents.componentRemoved, {
980
984
  ...app,
981
985
  componentDids: [child.meta.did],
986
+ context,
982
987
  });
983
988
 
984
989
  this.emit(BlockletInternalEvents.componentRemoved, {
@@ -1281,7 +1286,7 @@ class DiskBlockletManager extends BaseBlockletManager {
1281
1286
  this.configSynchronizer.throttledSyncAppConfig(blocklet.meta.did);
1282
1287
  }
1283
1288
 
1284
- this.emit(BlockletEvents.updated, newState);
1289
+ this.emit(BlockletEvents.updated, { ...newState, context });
1285
1290
  const serverSk = (await states.node.read()).sk;
1286
1291
  if (childDid) {
1287
1292
  const configs = JSON.stringify(newConfigs.map((x) => ({ key: x.key, value: x.value })));
@@ -1310,7 +1315,7 @@ class DiskBlockletManager extends BaseBlockletManager {
1310
1315
  return newState;
1311
1316
  }
1312
1317
 
1313
- async configNavigations({ did, navigations = [] }) {
1318
+ async configNavigations({ did, navigations = [] }, context) {
1314
1319
  if (!Array.isArray(navigations)) {
1315
1320
  throw new Error('navigations is not an array');
1316
1321
  }
@@ -1318,11 +1323,11 @@ class DiskBlockletManager extends BaseBlockletManager {
1318
1323
 
1319
1324
  const newState = await this.getBlocklet(did);
1320
1325
  this.emit(BlockletInternalEvents.appSettingChanged, { appDid: did });
1321
- this.emit(BlockletEvents.updated, newState);
1326
+ this.emit(BlockletEvents.updated, { ...newState, context });
1322
1327
  return newState;
1323
1328
  }
1324
1329
 
1325
- async updateWhoCanAccess({ did, whoCanAccess }) {
1330
+ async updateWhoCanAccess({ did, whoCanAccess }, context) {
1326
1331
  const dids = Array.isArray(did) ? did : [did];
1327
1332
 
1328
1333
  const [rootDid] = dids;
@@ -1371,22 +1376,22 @@ class DiskBlockletManager extends BaseBlockletManager {
1371
1376
 
1372
1377
  const blocklet = await this.getBlocklet(rootDid);
1373
1378
  this.emit(BlockletInternalEvents.appSettingChanged, { appDid: did });
1374
- this.emit(BlockletEvents.updated, { meta: { did: blocklet.meta.did } });
1379
+ this.emit(BlockletEvents.updated, { meta: { did: blocklet.meta.did }, context });
1375
1380
 
1376
1381
  return blocklet;
1377
1382
  }
1378
1383
 
1379
- async configOAuth({ did, oauth = {} }) {
1384
+ async configOAuth({ did, oauth = {} }, context) {
1380
1385
  const oldOAuth = await states.blockletExtras.getSettings(did, 'oauth', {});
1381
1386
  const mergeConfig = { ...oldOAuth, ...JSON.parse(oauth) };
1382
1387
  await states.blockletExtras.setSettings(did, { oauth: mergeConfig });
1383
1388
  const newState = await this.getBlocklet(did);
1384
1389
  this.emit(BlockletInternalEvents.appSettingChanged, { appDid: did });
1385
- this.emit(BlockletEvents.updated, newState);
1390
+ this.emit(BlockletEvents.updated, { ...newState, context });
1386
1391
  return newState;
1387
1392
  }
1388
1393
 
1389
- async configNotification({ did, notification = {} }) {
1394
+ async configNotification({ did, notification = {} }, context) {
1390
1395
  let newConfig = {};
1391
1396
  try {
1392
1397
  newConfig = JSON.parse(notification);
@@ -1410,14 +1415,14 @@ class DiskBlockletManager extends BaseBlockletManager {
1410
1415
  await states.blockletExtras.setSettings(did, { notification: mergeConfig });
1411
1416
  const newState = await this.getBlocklet(did);
1412
1417
  this.emit(BlockletInternalEvents.appSettingChanged, { appDid: did });
1413
- this.emit(BlockletEvents.updated, newState);
1418
+ this.emit(BlockletEvents.updated, { ...newState, context });
1414
1419
  return newState;
1415
1420
  }
1416
1421
 
1417
1422
  // -------------------------------------
1418
1423
 
1419
1424
  // TODO: this method can be removed if title is not changed anymore
1420
- async updateComponentTitle({ did, rootDid: inputRootDid, title }) {
1425
+ async updateComponentTitle({ did, rootDid: inputRootDid, title }, context) {
1421
1426
  await titleSchema.validateAsync(title);
1422
1427
 
1423
1428
  const blocklet = await states.blocklet.getBlocklet(inputRootDid);
@@ -1440,7 +1445,7 @@ class DiskBlockletManager extends BaseBlockletManager {
1440
1445
 
1441
1446
  // trigger meta.js refresh
1442
1447
  // trigger dashboard frontend refresh
1443
- this.emit(BlockletEvents.updated, blocklet);
1448
+ this.emit(BlockletEvents.updated, { ...blocklet, context });
1444
1449
 
1445
1450
  return this.getBlocklet(rootDid);
1446
1451
  }
@@ -1488,7 +1493,7 @@ class DiskBlockletManager extends BaseBlockletManager {
1488
1493
  return this.getBlocklet(rootDid);
1489
1494
  }
1490
1495
 
1491
- async updateAppSessionConfig({ did, config }) {
1496
+ async updateAppSessionConfig({ did, config }, context) {
1492
1497
  const validateConfig = await sessionConfigSchema.validateAsync(config);
1493
1498
 
1494
1499
  const blocklet = await this.getBlocklet(did);
@@ -1512,7 +1517,7 @@ class DiskBlockletManager extends BaseBlockletManager {
1512
1517
  this.emit(BlockletInternalEvents.appSettingChanged, { appDid: did });
1513
1518
 
1514
1519
  const newState = await this.getBlocklet(did);
1515
- this.emit(BlockletEvents.updated, newState);
1520
+ this.emit(BlockletEvents.updated, { ...newState, context });
1516
1521
 
1517
1522
  return newState;
1518
1523
  }
@@ -1548,7 +1553,7 @@ class DiskBlockletManager extends BaseBlockletManager {
1548
1553
  return states.blocklet.hasBlocklet(did);
1549
1554
  }
1550
1555
 
1551
- async setInitialized({ did, owner }) {
1556
+ async setInitialized({ did, owner }, context) {
1552
1557
  if (!validateOwner(owner)) {
1553
1558
  throw new Error('Blocklet owner is invalid');
1554
1559
  }
@@ -1557,12 +1562,12 @@ class DiskBlockletManager extends BaseBlockletManager {
1557
1562
  await states.blockletExtras.setSettings(blocklet.meta.did, { initialized: true, owner });
1558
1563
  logger.info('Blocklet initialized', { did, owner });
1559
1564
 
1560
- this.emit(BlockletEvents.updated, { meta: { did: blocklet.meta.did } });
1565
+ this.emit(BlockletEvents.updated, { meta: { did: blocklet.meta.did }, context });
1561
1566
 
1562
1567
  return this.getBlocklet(did);
1563
1568
  }
1564
1569
 
1565
- async updateOwner({ did, owner }) {
1570
+ async updateOwner({ did, owner }, context) {
1566
1571
  if (!validateOwner(owner)) {
1567
1572
  throw new Error('owner is invalid');
1568
1573
  }
@@ -1571,7 +1576,7 @@ class DiskBlockletManager extends BaseBlockletManager {
1571
1576
  await states.blockletExtras.setSettings(blocklet.meta.did, { owner });
1572
1577
  logger.info('update blocklet owner', { did, owner });
1573
1578
 
1574
- this.emit(BlockletEvents.updated, { meta: { did: blocklet.meta.did } });
1579
+ this.emit(BlockletEvents.updated, { meta: { did: blocklet.meta.did }, context });
1575
1580
 
1576
1581
  return this.getBlocklet(did);
1577
1582
  }
@@ -1866,6 +1871,51 @@ class DiskBlockletManager extends BaseBlockletManager {
1866
1871
  return spaceGateways;
1867
1872
  }
1868
1873
 
1874
+ /**
1875
+ * @description
1876
+ * @param {{
1877
+ * did: string,
1878
+ * autoBackup: import('@abtnode/client').AutoBackup
1879
+ * }} { did, autoBackup }
1880
+ * @param {{}} context
1881
+ * @memberof DiskBlockletManager
1882
+ */
1883
+ async updateAutoBackup({ did, autoBackup }, context) {
1884
+ /** @type {import('@abtnode/client').AutoBackup} */
1885
+ const value = { ...autoBackup };
1886
+ await states.blockletExtras.setSettings(did, { autoBackup: value });
1887
+
1888
+ await this.backupQueue.delete(did);
1889
+
1890
+ if (value.enabled) {
1891
+ const blocklet = await states.blocklet.getBlocklet(did);
1892
+ this.backupQueue.push(
1893
+ {
1894
+ entity: 'blocklet',
1895
+ action: 'backupToSpaces',
1896
+ id: did,
1897
+ blocklet,
1898
+ context,
1899
+ },
1900
+ did,
1901
+ true,
1902
+ BACKUPS.JOB.INTERVAL
1903
+ );
1904
+ }
1905
+ }
1906
+
1907
+ /**
1908
+ * @description
1909
+ * @param {import('@abtnode/client').RequestGetAutoBackupInput} { did }
1910
+ * @return {Promise<import('@abtnode/client').AutoBackup>}
1911
+ * @memberof DiskBlockletManager
1912
+ */
1913
+ async getAutoBackup({ did }) {
1914
+ const autoBackup = await states.blockletExtras.getSettings(did, 'autoBackup', { enabled: false });
1915
+
1916
+ return autoBackup;
1917
+ }
1918
+
1869
1919
  /**
1870
1920
  * @description
1871
1921
  * @param {{ did: string }} { did }
@@ -2259,11 +2309,12 @@ class DiskBlockletManager extends BaseBlockletManager {
2259
2309
  * user: {
2260
2310
  * did: string;
2261
2311
  * }
2262
- * }
2312
+ * },
2313
+ * backupState: Pick<import('@abtnode/models').BackupState, 'strategy'>
2263
2314
  * }} { blocklet, context }
2264
2315
  * @memberof BlockletManager
2265
2316
  */
2266
- async _onBackupToSpaces({ blocklet, context, backup }) {
2317
+ async _onBackupToSpaces({ blocklet, context, backupState }) {
2267
2318
  const {
2268
2319
  referrer,
2269
2320
  user: { did: userDid, locale },
@@ -2273,6 +2324,23 @@ class DiskBlockletManager extends BaseBlockletManager {
2273
2324
  meta: { did: appPid },
2274
2325
  } = blocklet;
2275
2326
 
2327
+ let backup = await states.backup.findOne({ appPid }, {}, { createdAt: -1 });
2328
+ if (backup?.status !== BACKUPS.STATUS.PROGRESS) {
2329
+ // 创建备份记录
2330
+ backup = await states.backup.start({
2331
+ appPid,
2332
+ userDid,
2333
+ strategy: backupState?.strategy,
2334
+ sourceUrl: path.join(this.dataDirs.tmp, 'backup', appDid),
2335
+ targetName: await getSpaceNameByEndpoint(getBackupEndpoint(blocklet.environments), 'DID Space'),
2336
+ });
2337
+ }
2338
+
2339
+ await states.backup.progress(backup.id, {
2340
+ message: 'Start backup...',
2341
+ progress: 10,
2342
+ });
2343
+
2276
2344
  try {
2277
2345
  const spacesBackup = new SpacesBackup({ appDid, appPid, event: this, userDid, referrer, locale, backup });
2278
2346
  this.emit(BlockletEvents.backupProgress, {
@@ -2298,6 +2366,7 @@ class DiskBlockletManager extends BaseBlockletManager {
2298
2366
  meta: { did: appPid },
2299
2367
  completed: true,
2300
2368
  progress: 100,
2369
+ backup,
2301
2370
  context,
2302
2371
  blocklet,
2303
2372
  });
@@ -2311,10 +2380,27 @@ class DiskBlockletManager extends BaseBlockletManager {
2311
2380
  completed: true,
2312
2381
  progress: -1,
2313
2382
  message: error?.message,
2383
+ backup,
2314
2384
  context,
2315
2385
  blocklet,
2316
2386
  });
2317
2387
  throw error;
2388
+ } finally {
2389
+ const autoBackup = await this.getAutoBackup({ did: appPid });
2390
+ if (autoBackup.enabled) {
2391
+ this.backupQueue.push(
2392
+ {
2393
+ entity: 'blocklet',
2394
+ action: 'backupToSpaces',
2395
+ id: appPid,
2396
+ blocklet,
2397
+ context,
2398
+ },
2399
+ appPid,
2400
+ true,
2401
+ BACKUPS.JOB.INTERVAL
2402
+ );
2403
+ }
2318
2404
  }
2319
2405
  }
2320
2406
 
@@ -2913,7 +2999,7 @@ class DiskBlockletManager extends BaseBlockletManager {
2913
2999
  const b = await this._rollback(action, did, oldBlocklet);
2914
3000
  logger.error('failed to upgrade blocklet', { did, version, name, error: err });
2915
3001
 
2916
- this.emit(BlockletEvents.updated, b);
3002
+ this.emit(BlockletEvents.updated, { ...b, context });
2917
3003
 
2918
3004
  const actionName = action === INSTALL_ACTIONS.INSTALL_COMPONENT ? 'install' : 'upgrade';
2919
3005
  const notificationEvent =
@@ -3482,44 +3568,22 @@ class DiskBlockletManager extends BaseBlockletManager {
3482
3568
  // eslint-disable-next-line no-unused-vars
3483
3569
  async _backupToSpaces({ blocklet, context }) {
3484
3570
  try {
3485
- const {
3486
- user: { did: userDid },
3487
- } = context;
3488
- const {
3489
- appDid,
3490
- meta: { did: appPid },
3491
- } = blocklet;
3492
-
3493
- const exist = await this.backupQueue.get(appDid);
3494
-
3495
- if (exist) {
3496
- throw new Error('A backup for this app is already in progress, abort!');
3497
- }
3571
+ const { did } = blocklet.meta;
3498
3572
 
3499
- const endpoint = getBackupEndpoint(blocklet.environments);
3500
-
3501
- const backup = await states.backup.start({
3502
- appPid,
3503
- userDid,
3504
- strategy: 1,
3505
- sourceUrl: path.join(this.dataDirs.tmp, 'backup', appDid),
3506
- targetName: await getSpaceNameByEndpoint(endpoint, 'DID Space'),
3507
- });
3508
- await states.backup.progress(backup.id, {
3509
- message: 'Start backup...',
3510
- progress: 10,
3511
- });
3573
+ await this.backupQueue.delete(did);
3512
3574
 
3513
3575
  this.backupQueue.push(
3514
3576
  {
3515
3577
  entity: 'blocklet',
3516
3578
  action: 'backupToSpaces',
3517
- id: appDid,
3579
+ id: did,
3518
3580
  blocklet,
3519
3581
  context,
3520
- backup,
3582
+ backupState: {
3583
+ strategy: BACKUPS.STRATEGY.MANUAL,
3584
+ },
3521
3585
  },
3522
- appDid
3586
+ did
3523
3587
  );
3524
3588
 
3525
3589
  return blocklet;
@@ -3747,7 +3811,7 @@ class FederatedBlockletManager extends DiskBlockletManager {
3747
3811
 
3748
3812
  const newState = await this.getBlocklet(did);
3749
3813
  this.emit(BlockletInternalEvents.appSettingChanged, { appDid: did });
3750
- this.emit(BlockletEvents.updated, newState);
3814
+ this.emit(BlockletEvents.updated, { ...newState, context });
3751
3815
  return newState;
3752
3816
  }
3753
3817
 
@@ -3801,7 +3865,7 @@ class FederatedBlockletManager extends DiskBlockletManager {
3801
3865
  });
3802
3866
  const newState = await this.getBlocklet(did);
3803
3867
  this.emit(BlockletInternalEvents.appSettingChanged, { appDid: did });
3804
- this.emit(BlockletEvents.updated, newState);
3868
+ this.emit(BlockletEvents.updated, { ...newState, context });
3805
3869
  return newState;
3806
3870
  }
3807
3871
 
@@ -3865,7 +3929,7 @@ class FederatedBlockletManager extends DiskBlockletManager {
3865
3929
  }
3866
3930
  const newState = await this.getBlocklet(did);
3867
3931
  this.emit(BlockletInternalEvents.appSettingChanged, { appDid: did });
3868
- this.emit(BlockletEvents.updated, newState);
3932
+ this.emit(BlockletEvents.updated, { ...newState, context });
3869
3933
  return newState;
3870
3934
  }
3871
3935
 
@@ -3881,7 +3945,7 @@ class FederatedBlockletManager extends DiskBlockletManager {
3881
3945
 
3882
3946
  const newState = await this.getBlocklet(did);
3883
3947
  this.emit(BlockletInternalEvents.appSettingChanged, { appDid: did });
3884
- this.emit(BlockletEvents.updated, newState);
3948
+ this.emit(BlockletEvents.updated, { ...newState, context });
3885
3949
  return newState;
3886
3950
  }
3887
3951
 
@@ -3900,7 +3964,7 @@ class FederatedBlockletManager extends DiskBlockletManager {
3900
3964
 
3901
3965
  const newState = await this.getBlocklet(did);
3902
3966
  this.emit(BlockletInternalEvents.appSettingChanged, { appDid: did });
3903
- this.emit(BlockletEvents.updated, newState);
3967
+ this.emit(BlockletEvents.updated, { ...newState, context });
3904
3968
  return newState;
3905
3969
  }
3906
3970
 
@@ -23,6 +23,7 @@ class BlockletBackup extends BaseBackup {
23
23
  const targetLogoPath = await this.writeLogoFile();
24
24
  blocklet.meta.appLogo = basename(targetLogoPath);
25
25
 
26
+ await ensureDir(dirname(this.blockletExportPath));
26
27
  await outputJson(this.blockletExportPath, blocklet);
27
28
 
28
29
  return {
package/lib/event.js CHANGED
@@ -23,6 +23,13 @@ const { getBackupEndpoint, getBackupFilesUrlFromEndpoint, getDIDSpacesUrlFromEnd
23
23
 
24
24
  const routingSnapshotPrefix = (blocklet) => (blocklet.mode === BLOCKLET_MODES.DEVELOPMENT ? '[DEV] ' : '');
25
25
 
26
+ /**
27
+ *
28
+ * @param {{
29
+ * blockletManager: import('./blocklet/manager/disk')
30
+ * }} param0
31
+ * @returns
32
+ */
26
33
  // Initialize the event queue: this will make events across process
27
34
  module.exports = ({
28
35
  blockletManager,
@@ -309,6 +316,7 @@ module.exports = ({
309
316
  backupUrl: getBackupFilesUrlFromEndpoint(backupEndpoint),
310
317
  success: payload?.progress === 100,
311
318
  errorMessage: payload?.message,
319
+ strategy: payload.backup.strategy,
312
320
  },
313
321
  context: payload?.context ?? {},
314
322
  result: cloneDeep(blocklet),
@@ -392,6 +400,40 @@ module.exports = ({
392
400
  listen(blockletManager, eventName, handleBlockletEvent);
393
401
  });
394
402
 
403
+ /**
404
+ * @description
405
+ * @param {string} eventName
406
+ * @param {import('@abtnode/client').BlockletState & {context: {}} } payload
407
+ */
408
+ async function autoBackupHandler(eventName, payload) {
409
+ const { did } = payload.meta;
410
+ const autoBackup = await blockletManager.getAutoBackup({ did });
411
+
412
+ if (autoBackup.enabled && payload.context) {
413
+ await blockletManager.backupQueue.delete(did);
414
+
415
+ blockletManager.backupQueue.push(
416
+ {
417
+ entity: 'blocklet',
418
+ action: 'backupToSpaces',
419
+ id: did,
420
+ blocklet: payload,
421
+ context: payload.context,
422
+ },
423
+ did
424
+ );
425
+ }
426
+ }
427
+
428
+ [
429
+ BlockletEvents.componentInstalled,
430
+ BlockletEvents.componentUpgraded,
431
+ BlockletEvents.componentRemoved,
432
+ BlockletEvents.updated,
433
+ ].forEach((eventName) => {
434
+ listen(blockletManager, eventName, autoBackupHandler);
435
+ });
436
+
395
437
  Object.keys(BlockletInternalEvents).forEach((key) => {
396
438
  listen(blockletManager, BlockletInternalEvents[key], onEvent);
397
439
  });
package/lib/index.js CHANGED
@@ -131,6 +131,7 @@ function ABTNode(options) {
131
131
  retryDelay: 10000, // retry after 10 seconds
132
132
  maxTimeout: 60 * 1000 * 60, // throw timeout error after 60 minutes
133
133
  id: (job) => (job ? md5(`${job.entity}-${job.action}-${job.id}`) : ''),
134
+ enableScheduledJob: true,
134
135
  },
135
136
  });
136
137
 
@@ -312,6 +313,10 @@ function ABTNode(options) {
312
313
  updateBlockletSpaceGateway: blockletManager.updateBlockletSpaceGateway.bind(blockletManager),
313
314
  getBlockletSpaceGateways: blockletManager.getBlockletSpaceGateways.bind(blockletManager),
314
315
 
316
+ // auto backup
317
+ updateAutoBackup: blockletManager.updateAutoBackup.bind(blockletManager),
318
+ getAutoBackup: blockletManager.getAutoBackup.bind(blockletManager),
319
+
315
320
  // blocklet backup record
316
321
  getBlockletBackups: blockletManager.getBlockletBackups.bind(blockletManager),
317
322
 
@@ -5,7 +5,7 @@ const get = require('lodash/get');
5
5
  const uniq = require('lodash/uniq');
6
6
  const joinUrl = require('url-join');
7
7
  const { getDisplayName } = require('@blocklet/meta/lib/util');
8
- const { BLOCKLET_SITE_GROUP_SUFFIX, NODE_SERVICES } = require('@abtnode/constant');
8
+ const { BLOCKLET_SITE_GROUP_SUFFIX, NODE_SERVICES, BACKUPS } = require('@abtnode/constant');
9
9
  const logger = require('@abtnode/logger')('@abtnode/core:states:audit-log');
10
10
 
11
11
  const BaseState = require('./base');
@@ -97,7 +97,7 @@ const expandUser = async (teamDid, userDid, passportId, info, node) => {
97
97
  * @param {object} result - GraphQL resolve result
98
98
  * @param {object} info - server info
99
99
  * @param {object} node - server instance
100
- * @return {string} the generated markdown source
100
+ * @return {Promise<string>} the generated markdown source
101
101
  */
102
102
  const getLogContent = async (action, args, context, result, info, node) => {
103
103
  const [site, [user, passport]] = await Promise.all([
@@ -137,9 +137,13 @@ const getLogContent = async (action, args, context, result, info, node) => {
137
137
  return `removed ${result.deletedComponent.meta.title}@${result.deletedComponent.meta.version} ${args.keepData !== false ? 'but kept its data and config' : 'and its data and config'}`; // prettier-ignore
138
138
  case 'configBlocklet':
139
139
  return `updated following config for ${args.did?.length > 1 ? componentOrApplicationInfo(result, [args.did[1]]) : 'application'}: ${args.configs.map(x => `*${x.key}*`).join(', ')}`; // prettier-ignore
140
+ // @see: core/state/lib/event.js#311
140
141
  case 'backupToSpaces':
141
142
  if (args?.success) {
142
- return `Backup application to ${args.url} successfully:\n- Backup files have been stored [here](${args.backupUrl})`;
143
+ if (args.strategy === BACKUPS.STRATEGY.MANUAL) {
144
+ return `Manual backup application to ${args.url} successfully:\n- Backup files have been stored [here](${args.backupUrl})`;
145
+ }
146
+ return `Automatic backup application to ${args.url} successfully:\n- Backup files have been stored [here](${args.backupUrl})`;
143
147
  }
144
148
  return `Backup application to ${args.url} failed:\n- The reason for the error is: <span style='color:red'>${args.errorMessage}</span>`;
145
149
  case 'configPublicToStore':
@@ -62,5 +62,12 @@ const init = (dataDirs, config = {}) => {
62
62
  runtimeInsight,
63
63
  };
64
64
  };
65
-
65
+ /**
66
+ * @type {{
67
+ * backup: import('./backup'),
68
+ * blocklet: import('./blocklet'),
69
+ * blockletExtras: import('./blocklet-extras'),
70
+ * [key: string]: any
71
+ * }}
72
+ */
66
73
  module.exports = createStateFactory(init, models);
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.17-beta-5d4664f8",
6
+ "version": "1.16.17-beta-ce49fe0e",
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.17-beta-5d4664f8",
23
- "@abtnode/auth": "1.16.17-beta-5d4664f8",
24
- "@abtnode/certificate-manager": "1.16.17-beta-5d4664f8",
25
- "@abtnode/constant": "1.16.17-beta-5d4664f8",
26
- "@abtnode/cron": "1.16.17-beta-5d4664f8",
27
- "@abtnode/logger": "1.16.17-beta-5d4664f8",
28
- "@abtnode/models": "1.16.17-beta-5d4664f8",
29
- "@abtnode/queue": "1.16.17-beta-5d4664f8",
30
- "@abtnode/rbac": "1.16.17-beta-5d4664f8",
31
- "@abtnode/router-provider": "1.16.17-beta-5d4664f8",
32
- "@abtnode/static-server": "1.16.17-beta-5d4664f8",
33
- "@abtnode/timemachine": "1.16.17-beta-5d4664f8",
34
- "@abtnode/util": "1.16.17-beta-5d4664f8",
22
+ "@abtnode/analytics": "1.16.17-beta-ce49fe0e",
23
+ "@abtnode/auth": "1.16.17-beta-ce49fe0e",
24
+ "@abtnode/certificate-manager": "1.16.17-beta-ce49fe0e",
25
+ "@abtnode/constant": "1.16.17-beta-ce49fe0e",
26
+ "@abtnode/cron": "1.16.17-beta-ce49fe0e",
27
+ "@abtnode/logger": "1.16.17-beta-ce49fe0e",
28
+ "@abtnode/models": "1.16.17-beta-ce49fe0e",
29
+ "@abtnode/queue": "1.16.17-beta-ce49fe0e",
30
+ "@abtnode/rbac": "1.16.17-beta-ce49fe0e",
31
+ "@abtnode/router-provider": "1.16.17-beta-ce49fe0e",
32
+ "@abtnode/static-server": "1.16.17-beta-ce49fe0e",
33
+ "@abtnode/timemachine": "1.16.17-beta-ce49fe0e",
34
+ "@abtnode/util": "1.16.17-beta-ce49fe0e",
35
35
  "@arcblock/did": "1.18.92",
36
36
  "@arcblock/did-auth": "1.18.92",
37
37
  "@arcblock/did-ext": "^1.18.92",
@@ -42,11 +42,11 @@
42
42
  "@arcblock/pm2-events": "^0.0.5",
43
43
  "@arcblock/validator": "^1.18.92",
44
44
  "@arcblock/vc": "1.18.92",
45
- "@blocklet/constant": "1.16.17-beta-5d4664f8",
46
- "@blocklet/env": "1.16.17-beta-5d4664f8",
47
- "@blocklet/meta": "1.16.17-beta-5d4664f8",
48
- "@blocklet/resolver": "1.16.17-beta-5d4664f8",
49
- "@blocklet/sdk": "1.16.17-beta-5d4664f8",
45
+ "@blocklet/constant": "1.16.17-beta-ce49fe0e",
46
+ "@blocklet/env": "1.16.17-beta-ce49fe0e",
47
+ "@blocklet/meta": "1.16.17-beta-ce49fe0e",
48
+ "@blocklet/resolver": "1.16.17-beta-ce49fe0e",
49
+ "@blocklet/sdk": "1.16.17-beta-ce49fe0e",
50
50
  "@did-space/client": "^0.3.11",
51
51
  "@fidm/x509": "^1.2.1",
52
52
  "@ocap/mcrypto": "1.18.92",
@@ -101,5 +101,5 @@
101
101
  "jest": "^27.5.1",
102
102
  "unzipper": "^0.10.11"
103
103
  },
104
- "gitHead": "e03febafae50406a3fb12706a2349e87ef2c1caa"
104
+ "gitHead": "d8a04ff2ef9cd52a02d019bc2c9a743785e869c3"
105
105
  }