@abtnode/core 1.16.17-beta-ce49fe0e → 1.16.17-beta-2679e686

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.
@@ -91,6 +91,7 @@ const normalizePathPrefix = require('@abtnode/util/lib/normalize-path-prefix');
91
91
  const pLimit = require('p-limit');
92
92
  const pRetry = require('p-retry');
93
93
 
94
+ const isFunction = require('lodash/isFunction');
94
95
  const { consumeServerlessNFT, consumeLauncherSession } = require('../../util/launcher');
95
96
  const util = require('../../util');
96
97
  const {
@@ -219,6 +220,18 @@ class DiskBlockletManager extends BaseBlockletManager {
219
220
  this.restoreQueue = restoreQueue;
220
221
  this.teamManager = teamManager;
221
222
 
223
+ if (isFunction(this.backupQueue.on)) {
224
+ const handleBackupComplete = async ({ id, job }) => {
225
+ await this.backupQueue.delete(id);
226
+
227
+ const autoBackup = await this.getAutoBackup({ did: id });
228
+ if (autoBackup?.enabled) {
229
+ this.backupQueue.push(job, id, true, BACKUPS.JOB.INTERVAL);
230
+ }
231
+ };
232
+ this.backupQueue.on('finished', handleBackupComplete).on('failed', handleBackupComplete);
233
+ }
234
+
222
235
  // cached installed blocklets for performance
223
236
  this.cachedBlocklets = new LRU({
224
237
  max: 100,
@@ -1887,13 +1900,14 @@ class DiskBlockletManager extends BaseBlockletManager {
1887
1900
 
1888
1901
  await this.backupQueue.delete(did);
1889
1902
 
1903
+ logger.info('updateAutoBackup.$value', value);
1904
+
1890
1905
  if (value.enabled) {
1891
1906
  const blocklet = await states.blocklet.getBlocklet(did);
1892
1907
  this.backupQueue.push(
1893
1908
  {
1894
1909
  entity: 'blocklet',
1895
1910
  action: 'backupToSpaces',
1896
- id: did,
1897
1911
  blocklet,
1898
1912
  context,
1899
1913
  },
@@ -2385,22 +2399,6 @@ class DiskBlockletManager extends BaseBlockletManager {
2385
2399
  blocklet,
2386
2400
  });
2387
2401
  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
- }
2404
2402
  }
2405
2403
  }
2406
2404
 
@@ -3576,7 +3574,6 @@ class DiskBlockletManager extends BaseBlockletManager {
3576
3574
  {
3577
3575
  entity: 'blocklet',
3578
3576
  action: 'backupToSpaces',
3579
- id: did,
3580
3577
  blocklet,
3581
3578
  context,
3582
3579
  backupState: {
@@ -97,12 +97,14 @@ class BlockletBackup extends BaseBackup {
97
97
  (e) => e.key === BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_LOGO_SQUARE
98
98
  )?.value;
99
99
  const appDir = this.blocklet.environments.find((e) => e.key === 'BLOCKLET_APP_DIR')?.value;
100
+ const dataDir = this.blocklet.environments.find((e) => e.key === 'BLOCKLET_DATA_DIR')?.value;
100
101
  const logo = this.blocklet?.meta?.logo;
101
102
  const defaultLogoPath = join(this.serverDir, 'data', this.blocklet.meta.name, 'logo.svg');
102
103
 
103
104
  const logoUrl = await getLogoUrl({
104
105
  customLogoSquareUrl,
105
106
  appDir,
107
+ dataDir,
106
108
  logo,
107
109
  defaultLogoPath,
108
110
  });
@@ -0,0 +1,49 @@
1
+ const debounce = require('lodash/debounce');
2
+ const logger = require('@abtnode/logger')('@abtnode/core:event/auto-backup-handler');
3
+
4
+ /**
5
+ * @description
6
+ * @param {string} eventName
7
+ * @param {import('@abtnode/client').BlockletState & {context: {}} } payload
8
+ * @param {import('../blocklet/manager/disk')} blockletManager
9
+ */
10
+ async function autoBackupHandler(eventName, payload, blockletManager) {
11
+ const { did } = payload.meta;
12
+ const autoBackup = await blockletManager.getAutoBackup({ did });
13
+
14
+ logger.info('autoBackupHandler.$autoBackup', autoBackup);
15
+ logger.info('autoBackupHandler.$Boolean(payload.context)', Boolean(payload.context));
16
+
17
+ if (autoBackup.enabled && payload.context) {
18
+ await blockletManager.backupQueue.delete(did);
19
+
20
+ blockletManager.backupQueue.push(
21
+ {
22
+ entity: 'blocklet',
23
+ action: 'backupToSpaces',
24
+ blocklet: payload,
25
+ context: payload.context,
26
+ },
27
+ did
28
+ );
29
+ }
30
+ }
31
+
32
+ const debouncedFuncs = {};
33
+ /**
34
+ * @description
35
+ * @param {string} id
36
+ * @param {Function} fn
37
+ * @return {Function}
38
+ */
39
+ function autoBackupHandlerFactory(id, fn) {
40
+ if (!debouncedFuncs[id]) {
41
+ debouncedFuncs[id] = debounce(fn, 3000);
42
+ }
43
+ return debouncedFuncs[id];
44
+ }
45
+
46
+ module.exports = {
47
+ autoBackupHandler,
48
+ autoBackupHandlerFactory,
49
+ };
@@ -11,22 +11,23 @@ const {
11
11
  BlockletInternalEvents,
12
12
  } = require('@blocklet/constant');
13
13
  const { EVENTS } = require('@abtnode/constant');
14
- const { NodeMonitSender } = require('./monitor/node-monit-sender');
15
- const handleInstanceInStore = require('./util/public-to-store');
16
- const { isCLI } = require('./util');
14
+ const { NodeMonitSender } = require('../monitor/node-monit-sender');
15
+ const handleInstanceInStore = require('../util/public-to-store');
16
+ const { isCLI } = require('../util');
17
17
 
18
18
  const eventHub =
19
19
  process.env.NODE_ENV === 'test' ? require('@arcblock/event-hub/single') : require('@arcblock/event-hub');
20
20
 
21
- const states = require('./states');
22
- const { getBackupEndpoint, getBackupFilesUrlFromEndpoint, getDIDSpacesUrlFromEndpoint } = require('./util/spaces');
21
+ const states = require('../states');
22
+ const { getBackupEndpoint, getBackupFilesUrlFromEndpoint, getDIDSpacesUrlFromEndpoint } = require('../util/spaces');
23
+ const { autoBackupHandlerFactory, autoBackupHandler } = require('./auto-backup-handler');
23
24
 
24
25
  const routingSnapshotPrefix = (blocklet) => (blocklet.mode === BLOCKLET_MODES.DEVELOPMENT ? '[DEV] ' : '');
25
26
 
26
27
  /**
27
28
  *
28
29
  * @param {{
29
- * blockletManager: import('./blocklet/manager/disk')
30
+ * blockletManager: import('../blocklet/manager/disk')
30
31
  * }} param0
31
32
  * @returns
32
33
  */
@@ -400,38 +401,26 @@ module.exports = ({
400
401
  listen(blockletManager, eventName, handleBlockletEvent);
401
402
  });
402
403
 
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
404
  [
429
405
  BlockletEvents.componentInstalled,
430
406
  BlockletEvents.componentUpgraded,
431
407
  BlockletEvents.componentRemoved,
432
408
  BlockletEvents.updated,
433
409
  ].forEach((eventName) => {
434
- listen(blockletManager, eventName, autoBackupHandler);
410
+ listen(
411
+ blockletManager,
412
+ eventName,
413
+ /**
414
+ *
415
+ * @param {string} eventName
416
+ * @param {import('@abtnode/client').BlockletState & {context: {}} } payload
417
+ * @returns
418
+ */
419
+ (_eventName, payload, ...args) => {
420
+ const id = payload.meta.did;
421
+ return autoBackupHandlerFactory(id, autoBackupHandler)(eventName, payload, blockletManager, ...args);
422
+ }
423
+ );
435
424
  });
436
425
 
437
426
  Object.keys(BlockletInternalEvents).forEach((key) => {
@@ -67,6 +67,8 @@ const init = (dataDirs, config = {}) => {
67
67
  * backup: import('./backup'),
68
68
  * blocklet: import('./blocklet'),
69
69
  * blockletExtras: import('./blocklet-extras'),
70
+ * notification: import('./notification'),
71
+ * job: import('./job'),
70
72
  * [key: string]: any
71
73
  * }}
72
74
  */
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.17-beta-ce49fe0e",
6
+ "version": "1.16.17-beta-2679e686",
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-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",
22
+ "@abtnode/analytics": "1.16.17-beta-2679e686",
23
+ "@abtnode/auth": "1.16.17-beta-2679e686",
24
+ "@abtnode/certificate-manager": "1.16.17-beta-2679e686",
25
+ "@abtnode/constant": "1.16.17-beta-2679e686",
26
+ "@abtnode/cron": "1.16.17-beta-2679e686",
27
+ "@abtnode/logger": "1.16.17-beta-2679e686",
28
+ "@abtnode/models": "1.16.17-beta-2679e686",
29
+ "@abtnode/queue": "1.16.17-beta-2679e686",
30
+ "@abtnode/rbac": "1.16.17-beta-2679e686",
31
+ "@abtnode/router-provider": "1.16.17-beta-2679e686",
32
+ "@abtnode/static-server": "1.16.17-beta-2679e686",
33
+ "@abtnode/timemachine": "1.16.17-beta-2679e686",
34
+ "@abtnode/util": "1.16.17-beta-2679e686",
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-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",
45
+ "@blocklet/constant": "1.16.17-beta-2679e686",
46
+ "@blocklet/env": "1.16.17-beta-2679e686",
47
+ "@blocklet/meta": "1.16.17-beta-2679e686",
48
+ "@blocklet/resolver": "1.16.17-beta-2679e686",
49
+ "@blocklet/sdk": "1.16.17-beta-2679e686",
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": "d8a04ff2ef9cd52a02d019bc2c9a743785e869c3"
104
+ "gitHead": "abbe4a479b379552cd9ebd8c27732b360844cb73"
105
105
  }