@abtnode/blocklet-services 1.16.15-beta-58d50c9a → 1.16.15-beta-e143b1cf

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.
Files changed (47) hide show
  1. package/api/index.js +3 -3
  2. package/api/libs/email.js +15 -18
  3. package/api/libs/image.js +15 -1
  4. package/api/libs/open-graph/index.js +6 -5
  5. package/api/routes/blocklet.js +16 -30
  6. package/api/services/image/index.js +3 -3
  7. package/build/asset-manifest.json +39 -39
  8. package/build/index.html +1 -1
  9. package/build/service-worker.js +1 -1
  10. package/build/service-worker.js.map +1 -1
  11. package/build/static/css/{7272.0ae9f678.chunk.css → 2784.1780cb4a.chunk.css} +1 -1
  12. package/build/static/css/{5355.c4fb5c4a.chunk.css → 4802.bf353f58.chunk.css} +1 -1
  13. package/build/static/js/{1565.77a767e9.chunk.js → 1565.a5a98618.chunk.js} +2 -2
  14. package/build/static/js/{1760.f694de7c.chunk.js → 1760.7726694e.chunk.js} +2 -2
  15. package/build/static/js/1980.ff084f4c.chunk.js +2 -0
  16. package/build/static/js/2653.892d84ff.chunk.js +2 -0
  17. package/build/static/js/2784.b037c6d1.chunk.js +3 -0
  18. package/build/static/js/3620.da2326b7.chunk.js +2 -0
  19. package/build/static/js/3688.0122dfcd.chunk.js +2 -0
  20. package/build/static/js/4461.d7dcfc2f.chunk.js +2 -0
  21. package/build/static/js/4802.4e44fe6c.chunk.js +2 -0
  22. package/build/static/js/{3551.4fc28c54.chunk.js → 5628.01088d1b.chunk.js} +2 -2
  23. package/build/static/js/6186.e4739d35.chunk.js +2 -0
  24. package/build/static/js/6498.bd96fa39.chunk.js +2 -0
  25. package/build/static/js/6640.14ab87a4.chunk.js +2 -0
  26. package/build/static/js/6868.8289e873.chunk.js +2 -0
  27. package/build/static/js/7310.1163692a.chunk.js +2 -0
  28. package/build/static/js/7465.b76f2c39.chunk.js +3 -0
  29. package/build/static/js/main.2c491798.js +3 -0
  30. package/package.json +18 -18
  31. package/build/static/js/1546.2866cfc3.chunk.js +0 -2
  32. package/build/static/js/1980.79862e88.chunk.js +0 -2
  33. package/build/static/js/2653.4f690d53.chunk.js +0 -2
  34. package/build/static/js/4422.f79c1ff1.chunk.js +0 -3
  35. package/build/static/js/5299.cf6e20df.chunk.js +0 -2
  36. package/build/static/js/5355.cc6d4f2b.chunk.js +0 -2
  37. package/build/static/js/5541.aec2d90d.chunk.js +0 -2
  38. package/build/static/js/6186.d46ba024.chunk.js +0 -2
  39. package/build/static/js/6326.3a3cb154.chunk.js +0 -2
  40. package/build/static/js/7272.c85146f8.chunk.js +0 -3
  41. package/build/static/js/7524.de240f40.chunk.js +0 -2
  42. package/build/static/js/878.daf9064b.chunk.js +0 -2
  43. package/build/static/js/926.2a63d835.chunk.js +0 -2
  44. package/build/static/js/main.e324f949.js +0 -3
  45. /package/build/static/js/{7272.c85146f8.chunk.js.LICENSE.txt → 2784.b037c6d1.chunk.js.LICENSE.txt} +0 -0
  46. /package/build/static/js/{4422.f79c1ff1.chunk.js.LICENSE.txt → 7465.b76f2c39.chunk.js.LICENSE.txt} +0 -0
  47. /package/build/static/js/{main.e324f949.js.LICENSE.txt → main.2c491798.js.LICENSE.txt} +0 -0
package/api/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
  const http = require('http');
2
- const path = require('path');
3
2
  const get = require('lodash/get');
4
3
  const morgan = require('morgan');
5
4
  const express = require('express');
@@ -14,6 +13,7 @@ const minimatch = require('minimatch');
14
13
  const { getAccessLogStream } = require('@abtnode/logger');
15
14
  const { WELLKNOWN_SERVICE_PATH_PREFIX, NODE_SERVICES_PREFIX, EVENTS } = require('@abtnode/constant');
16
15
  const { BlockletEvents, BlockletInternalEvents } = require('@blocklet/constant');
16
+ const { getAppOgCacheDir } = require('@abtnode/util/lib/blocklet');
17
17
  const normalizePathPrefix = require('@abtnode/util/lib/normalize-path-prefix');
18
18
  const createInvite = require('@abtnode/auth/lib/invitation');
19
19
  const eventHub =
@@ -250,7 +250,7 @@ module.exports = function createServer(node, serverOptions = {}) {
250
250
  extraResources: [
251
251
  {
252
252
  prefix: '/open-graph',
253
- dir: path.join(node.dataDirs.tmp, 'services', 'open-graph'),
253
+ dir: getAppOgCacheDir(node.dataDirs.tmp),
254
254
  },
255
255
  ],
256
256
  });
@@ -278,7 +278,7 @@ module.exports = function createServer(node, serverOptions = {}) {
278
278
  createFederatedRoutes.init(server, node, options);
279
279
  createUserRoutes.init(server, node, options);
280
280
  createEnvRoutes.init(server, node, options);
281
- createBlockletRoutes.init(server, node, eventHub);
281
+ createBlockletRoutes.init(server, node);
282
282
  createConnectSessionRoutes.init(server, node, options);
283
283
  createConnectRelayRoutes.init(server, node, options, wsRouter);
284
284
  authRoutes.attachDidAuthHandlers(server);
package/api/libs/email.js CHANGED
@@ -1,8 +1,7 @@
1
1
  const { Joi } = require('@arcblock/validator');
2
2
  const { render } = require('@react-email/components');
3
- const { getSafeEnv } = require('@abtnode/core/lib/util');
4
- const { getRuntimeEnvironments } = require('@abtnode/core/lib/util/blocklet');
5
3
  const { emailConfigSchema } = require('@blocklet/sdk/lib/validators/email');
4
+ const getBlockletInfo = require('@blocklet/meta/lib/info');
6
5
  const logger = require('@abtnode/logger')('blocklet-services:notification');
7
6
  const omit = require('lodash/omit');
8
7
 
@@ -26,35 +25,33 @@ async function sendEmail(receiver, notification, { teamDid, node, locale }) {
26
25
  if (!blocklet) {
27
26
  logger.warn(`Failed to get blocklet: ${teamDid}`);
28
27
  }
29
- const config = blocklet?.settings?.notification?.email || {};
28
+ const config = blocklet.settings?.notification?.email || {};
30
29
 
31
30
  if (!config.enabled) {
32
31
  // skip send email
33
32
  return;
34
33
  }
35
34
 
36
- const { error, value: emailConfig } = emailConfigSchema.validate(omit(config, 'enabled'));
35
+ const { error, value } = emailConfigSchema.validate(omit(config, 'enabled'));
37
36
  if (error) {
38
37
  throw new Error(error.message);
39
38
  }
40
39
 
41
- const nodeEnvironments = await node.states.node.getEnvironments();
42
- const env = getSafeEnv(getRuntimeEnvironments(blocklet, nodeEnvironments));
43
-
44
- const url = env?.BLOCKLET_APP_URL;
45
- // logo 采用顺序:横板 logo -> 正方形 logo -> blocklet.yml 指定的 logo
40
+ const info = getBlockletInfo(blocklet);
41
+ // logo 采用顺序:横板 logo -> 正方形 logo
46
42
  const logo =
47
- env?.BLOCKLET_APP_LOGO_RECT || env?.BLOCKLET_APP_LOGO_SQUARE || `${url}/.well-known/service/blocklet/logo/`;
43
+ blocklet.environmentObj?.BLOCKLET_APP_LOGO_RECT ||
44
+ `${info.appUrl}/.well-known/service/blocklet/logo?imageFilter=resize&h=80`;
48
45
 
49
46
  const appInfo = {
50
47
  logo,
51
- description: blocklet?.meta?.description,
52
- title: blocklet?.meta?.title || blocklet?.meta?.name,
53
- version: blocklet?.meta?.version,
54
- url,
48
+ description: info.description,
49
+ title: info.name,
50
+ version: info.version,
51
+ url: info.appUrl,
55
52
  };
56
53
 
57
- const subject = `[${appInfo.title}] ${
54
+ const subject = `${
58
55
  notification.title ||
59
56
  { zh: '您收到了一个通知', en: 'You have received a notification' }[locale] ||
60
57
  'You have received a notification'
@@ -69,14 +66,14 @@ async function sendEmail(receiver, notification, { teamDid, node, locale }) {
69
66
  })
70
67
  );
71
68
  const emailData = {
72
- from: emailConfig.user,
69
+ from: `"${info.name}" <${value.user}>`,
73
70
  to: receiver,
74
71
  title: notification.title,
75
72
  subject,
76
73
  html,
77
- replyTo: emailConfig.from,
74
+ replyTo: value.from,
78
75
  };
79
- const transporter = cache.getTransport({ did: teamDid, config: emailConfig });
76
+ const transporter = cache.getTransport({ did: teamDid, config: value });
80
77
  await transporter.sendMail(emailData);
81
78
  }
82
79
 
package/api/libs/image.js CHANGED
@@ -101,6 +101,12 @@ const isImageAccepted = (req) => {
101
101
  return FORMATS.some((x) => req.accepts(`image/${x}`));
102
102
  };
103
103
 
104
+ const getCacheFilePath = (dataDir, fileName) => {
105
+ const result = path.join(dataDir, fileName.substring(0, 2), fileName.substring(2));
106
+ fs.ensureDirSync(path.dirname(result));
107
+ return result;
108
+ };
109
+
104
110
  const isImageRequest = (req) => {
105
111
  if (req.method !== 'GET') {
106
112
  return false;
@@ -108,6 +114,10 @@ const isImageRequest = (req) => {
108
114
  if (!req.query.imageFilter) {
109
115
  return false;
110
116
  }
117
+ const extension = toLower(path.extname(req.path).slice(1));
118
+ if (extension && !FORMATS.includes(EXTENSIONS[extension])) {
119
+ return false;
120
+ }
111
121
  const { error, value } = schema.validate(req.query);
112
122
  if (error) {
113
123
  logger.warn('image service filter params invalid:', formatError(error));
@@ -137,6 +147,9 @@ const processAndRespond = (req, res, cacheDir, getSrc, ext, sendOptions = { maxA
137
147
  params.f = 'png';
138
148
  }
139
149
  }
150
+ if (!extension && !params.f) {
151
+ params.f = 'png';
152
+ }
140
153
 
141
154
  if (!extension && !params.f) {
142
155
  res.status(400).send('Image filter failed: either extension or format must be specified');
@@ -144,7 +157,7 @@ const processAndRespond = (req, res, cacheDir, getSrc, ext, sendOptions = { maxA
144
157
  }
145
158
 
146
159
  const cacheKey = md5(stringify({ target: req.target, path: req.originalUrl, params }));
147
- const destPath = path.join(cacheDir, `${cacheKey}.${params.f || extension}`);
160
+ const destPath = getCacheFilePath(cacheDir, `${cacheKey}.${params.f || extension}`);
148
161
  if (fs.existsSync(destPath)) {
149
162
  res.header('Content-Type', `image/${params.f || extension}`);
150
163
  res.sendFile(destPath, sendOptions);
@@ -267,6 +280,7 @@ module.exports = {
267
280
  isImageRequest,
268
281
  processAndRespond,
269
282
  processImage,
283
+ getCacheFilePath,
270
284
  EXTENSIONS,
271
285
  MODES,
272
286
  };
@@ -14,6 +14,7 @@ const { WELLKNOWN_SERVICE_PATH_PREFIX } = require('@abtnode/constant');
14
14
  const logger = require('@abtnode/logger')('@abtnode/blocklet-services/og');
15
15
 
16
16
  const { getTemplate, getLogoSvg } = require('./template');
17
+ const { getCacheFilePath } = require('../image');
17
18
 
18
19
  const TEMPLATES = ['default', 'section', 'cover'];
19
20
 
@@ -66,8 +67,8 @@ const schema = Joi.object({
66
67
  }).options({ stripUnknown: true, allowUnknown: true, noDefaults: false });
67
68
 
68
69
  const generateTasks = {};
69
- const getOgImage = ({ input, info, dataDir, format, tmpDir }) => {
70
- fs.ensureDirSync(dataDir);
70
+ const getOgImage = ({ input, info, cacheDir, format, tmpDir }) => {
71
+ fs.ensureDirSync(cacheDir);
71
72
  fs.ensureDirSync(tmpDir);
72
73
 
73
74
  const color = getPassportColor(info.passportColor, info.did);
@@ -94,7 +95,7 @@ const getOgImage = ({ input, info, dataDir, format, tmpDir }) => {
94
95
  const params = { ...value, width: 1200, height: 630, color, format };
95
96
  const cacheKey = md5(stringify(params));
96
97
  const nocache = input.nocache === '1';
97
- const destPath = path.join(dataDir, `${cacheKey}.${format}`);
98
+ const destPath = getCacheFilePath(cacheDir, `${cacheKey}.${format}`);
98
99
  if (!nocache && fs.existsSync(destPath)) {
99
100
  return destPath;
100
101
  }
@@ -159,14 +160,14 @@ const convertExternalImage = (url, dest) => {
159
160
  };
160
161
 
161
162
  const getCachedExternalImage = (cacheKey, port = process.env.ABT_NODE_SERVICE_PORT) => {
162
- return `http://127.0.0.1:${port}/open-graph/${cacheKey}.png`;
163
+ return `http://127.0.0.1:${port}/open-graph/${cacheKey.slice(0, 2)}/${cacheKey.slice(2)}.png`;
163
164
  };
164
165
 
165
166
  const cacheTasks = {};
166
167
  const ensureExternalImage = (params, key, tmpDir) => {
167
168
  if (params[key]) {
168
169
  const cacheKey = md5(params[key]);
169
- const destPath = path.join(tmpDir, `${cacheKey}.png`);
170
+ const destPath = getCacheFilePath(tmpDir, `${cacheKey}.png`);
170
171
  if (fs.existsSync(destPath)) {
171
172
  return getCachedExternalImage(cacheKey);
172
173
  }
@@ -23,6 +23,7 @@ const {
23
23
  cacheError,
24
24
  } = require('@abtnode/util/lib/logo-middleware');
25
25
  const formatName = require('@abtnode/util/lib/format-name');
26
+ const { getAppOgCacheDir, getAppImageCacheDir } = require('@abtnode/util/lib/blocklet');
26
27
  const {
27
28
  fixBlockletStatus,
28
29
  wipeSensitiveData,
@@ -34,13 +35,12 @@ const {
34
35
  USER_AVATAR_PATH_PREFIX,
35
36
  ROLES,
36
37
  USER_AVATAR_URL_PREFIX,
37
- OPEN_GRAPH_DIR,
38
38
  } = require('@abtnode/constant');
39
39
  const logger = require('@abtnode/logger')(require('../../package.json').name);
40
40
 
41
41
  const { createDownloadLogStream } = require('@abtnode/core/lib/util/log');
42
42
 
43
- const { BlockletStatus, BlockletInternalEvents } = require('@blocklet/constant');
43
+ const { BlockletStatus } = require('@blocklet/constant');
44
44
 
45
45
  const { checkAdminPermission } = require('../middlewares/check-permission');
46
46
  const { isImageAccepted, isImageRequest, processAndRespond } = require('../libs/image');
@@ -55,17 +55,16 @@ const polishBlocklet = (doc) => {
55
55
  const prefix = WELLKNOWN_SERVICE_PATH_PREFIX;
56
56
 
57
57
  module.exports = {
58
- init(server, node, events) {
58
+ init(server, node) {
59
59
  const onSendFallbackLogo = ({ res, sendOptions }) => {
60
60
  res.sendStaticFile('/images/blocklet.png', sendOptions);
61
61
  };
62
62
 
63
63
  const attachSendLogoFn = (req, res, next) => {
64
64
  res.sendLogoFile = (fileName, options) => {
65
- logger.info('send logo file', { fileName, options });
66
65
  if (isImageRequest(req)) {
67
- logger.info('send logo file with image service', { fileName, options });
68
- const appDir = path.join(cacheDir, req.blocklet.appPid);
66
+ logger.info('send logo with image service', { fileName, options });
67
+ const appDir = path.join(req.blocklet.env.cacheDir, '.services', 'image-filter');
69
68
  processAndRespond(
70
69
  req,
71
70
  res,
@@ -75,7 +74,7 @@ module.exports = {
75
74
  req.sendOptions
76
75
  );
77
76
  } else {
78
- logger.info('send logo file with file', { fileName, options });
77
+ logger.info('send logo with file', { fileName, options });
79
78
  res.sendFile(fileName, options);
80
79
  }
81
80
  };
@@ -139,7 +138,6 @@ module.exports = {
139
138
  cacheError
140
139
  );
141
140
 
142
- const cacheDir = path.join(node.dataDirs.cache, 'services', 'image');
143
141
  server.get(`${prefix}${USER_AVATAR_PATH_PREFIX}/:fileName`, async (req, res) => {
144
142
  try {
145
143
  const blocklet = await req.getBlocklet();
@@ -160,7 +158,7 @@ module.exports = {
160
158
  }
161
159
 
162
160
  if (isImageAccepted(req) && isImageRequest(req)) {
163
- const appDir = path.join(cacheDir, blocklet.appPid);
161
+ const appDir = path.join(blocklet.env.cacheDir, '.services', 'image-filter');
164
162
  processAndRespond(req, res, appDir, () =>
165
163
  Promise.resolve([fs.createReadStream(avatarFile), path.extname(avatarFile).slice(1)])
166
164
  );
@@ -503,7 +501,7 @@ module.exports = {
503
501
  });
504
502
  });
505
503
 
506
- const tmpDir = path.join(node.dataDirs.tmp, 'services', 'open-graph');
504
+ const tmpDir = getAppOgCacheDir(node.dataDirs.tmp);
507
505
  server.get(`${prefix}/blocklet/og.(png|html)`, async (req, res) => {
508
506
  try {
509
507
  const format = req.path.split('.').pop();
@@ -511,10 +509,15 @@ module.exports = {
511
509
  const blocklet = await req.getBlocklet();
512
510
  const cache = req.query.nocache !== '1';
513
511
 
514
- const dataDir = path.join(blocklet.env.dataDir, OPEN_GRAPH_DIR);
515
- const sourceFile = await getOgImage({ input: req.query, info, dataDir, format, tmpDir });
512
+ const sourceFile = await getOgImage({
513
+ input: req.query,
514
+ info,
515
+ format,
516
+ cacheDir: getAppOgCacheDir(blocklet.env.cacheDir),
517
+ tmpDir,
518
+ });
516
519
  if (format === 'png' && isImageAccepted(req) && isImageRequest(req)) {
517
- const appDir = path.join(cacheDir, blocklet.appPid);
520
+ const appDir = getAppImageCacheDir(blocklet.env.cacheDir);
518
521
  processAndRespond(req, res, appDir, () =>
519
522
  Promise.resolve([fs.createReadStream(sourceFile), path.extname(sourceFile).slice(1)])
520
523
  );
@@ -526,22 +529,5 @@ module.exports = {
526
529
  res.status(500).send(err.message);
527
530
  }
528
531
  });
529
- // Bust cache on blocklet config change
530
- if (events) {
531
- events.on(BlockletInternalEvents.appConfigChanged, ({ appDid }) => {
532
- ['png', 'html'].forEach((format) => {
533
- const cached = path.join(node.dataDirs.data, appDid, `og.${format}`);
534
- if (fs.existsSync(cached)) {
535
- logger.info('bust og cache on blocklet config change', { appDid, cached });
536
- try {
537
- fs.unlinkSync(cached);
538
- logger.info('bust og cache on blocklet config change', { appDid, format });
539
- } catch (err) {
540
- logger.error('bust og cache on blocklet config change', { appDid, format, error: err });
541
- }
542
- }
543
- });
544
- });
545
- }
546
532
  },
547
533
  };
@@ -2,6 +2,7 @@
2
2
  // @link https://sharp.pixelplumbing.com/
3
3
  const http = require('http');
4
4
  const path = require('path');
5
+ const { getAppImageCacheDir } = require('@abtnode/util/lib/blocklet');
5
6
 
6
7
  const logger = require('@abtnode/logger')(require('../../../package.json').name);
7
8
 
@@ -29,7 +30,7 @@ const createImageService = ({ node }) => {
29
30
 
30
31
  const [type, extension] = (res.headers['content-type'] || '').split('/');
31
32
  if (type !== 'image') {
32
- reject(new Error('upstream response is not an image'));
33
+ reject(new Error(`unexpected response type from upstream: ${type}, expected image`));
33
34
  return;
34
35
  }
35
36
 
@@ -41,9 +42,8 @@ const createImageService = ({ node }) => {
41
42
  });
42
43
  };
43
44
 
44
- const cacheDir = path.join(node.dataDirs.cache, 'services', 'image');
45
45
  const processImage = (req, res) => {
46
- const appDir = path.join(cacheDir, req.getBlockletDid());
46
+ const appDir = getAppImageCacheDir(path.join(node.dataDirs.cache, req.getBlockletDid()));
47
47
  processAndRespond(req, res, appDir, getUpstreamImage);
48
48
  };
49
49
 
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "/.well-known/service/static/static/css/main.7ea79dc8.css",
4
- "main.js": "/.well-known/service/static/static/js/main.e324f949.js",
4
+ "main.js": "/.well-known/service/static/static/js/main.2c491798.js",
5
5
  "static/js/4716.60c7a9b1.chunk.js": "/.well-known/service/static/static/js/4716.60c7a9b1.chunk.js",
6
6
  "static/js/6856.01a0c9a2.chunk.js": "/.well-known/service/static/static/js/6856.01a0c9a2.chunk.js",
7
7
  "static/js/1660.c490fcee.chunk.js": "/.well-known/service/static/static/js/1660.c490fcee.chunk.js",
8
8
  "static/js/9899.eb448353.chunk.js": "/.well-known/service/static/static/js/9899.eb448353.chunk.js",
9
9
  "static/js/6737.597a5126.chunk.js": "/.well-known/service/static/static/js/6737.597a5126.chunk.js",
10
- "static/js/1760.f694de7c.chunk.js": "/.well-known/service/static/static/js/1760.f694de7c.chunk.js",
10
+ "static/js/1760.7726694e.chunk.js": "/.well-known/service/static/static/js/1760.7726694e.chunk.js",
11
11
  "static/js/9620.c8f2696a.chunk.js": "/.well-known/service/static/static/js/9620.c8f2696a.chunk.js",
12
12
  "static/js/1480.35a3e406.chunk.js": "/.well-known/service/static/static/js/1480.35a3e406.chunk.js",
13
- "static/js/6186.d46ba024.chunk.js": "/.well-known/service/static/static/js/6186.d46ba024.chunk.js",
13
+ "static/js/6186.e4739d35.chunk.js": "/.well-known/service/static/static/js/6186.e4739d35.chunk.js",
14
14
  "static/js/4682.23dd054e.chunk.js": "/.well-known/service/static/static/js/4682.23dd054e.chunk.js",
15
15
  "static/js/6711.38948be4.chunk.js": "/.well-known/service/static/static/js/6711.38948be4.chunk.js",
16
16
  "static/js/8437.0d88b9db.chunk.js": "/.well-known/service/static/static/js/8437.0d88b9db.chunk.js",
@@ -18,22 +18,22 @@
18
18
  "static/js/5434.523d071d.chunk.js": "/.well-known/service/static/static/js/5434.523d071d.chunk.js",
19
19
  "static/js/9409.21bf1e37.chunk.js": "/.well-known/service/static/static/js/9409.21bf1e37.chunk.js",
20
20
  "static/js/5859.b3338b24.chunk.js": "/.well-known/service/static/static/js/5859.b3338b24.chunk.js",
21
- "static/js/3551.4fc28c54.chunk.js": "/.well-known/service/static/static/js/3551.4fc28c54.chunk.js",
22
- "static/js/1980.79862e88.chunk.js": "/.well-known/service/static/static/js/1980.79862e88.chunk.js",
21
+ "static/js/5628.01088d1b.chunk.js": "/.well-known/service/static/static/js/5628.01088d1b.chunk.js",
22
+ "static/js/1980.ff084f4c.chunk.js": "/.well-known/service/static/static/js/1980.ff084f4c.chunk.js",
23
23
  "static/js/861.2a22cbbf.chunk.js": "/.well-known/service/static/static/js/861.2a22cbbf.chunk.js",
24
24
  "static/js/5176.98a62a22.chunk.js": "/.well-known/service/static/static/js/5176.98a62a22.chunk.js",
25
25
  "static/js/9102.7087c66c.chunk.js": "/.well-known/service/static/static/js/9102.7087c66c.chunk.js",
26
- "static/js/6326.3a3cb154.chunk.js": "/.well-known/service/static/static/js/6326.3a3cb154.chunk.js",
27
- "static/js/2653.4f690d53.chunk.js": "/.well-known/service/static/static/js/2653.4f690d53.chunk.js",
26
+ "static/js/3688.0122dfcd.chunk.js": "/.well-known/service/static/static/js/3688.0122dfcd.chunk.js",
27
+ "static/js/2653.892d84ff.chunk.js": "/.well-known/service/static/static/js/2653.892d84ff.chunk.js",
28
28
  "static/js/3593.98d9341a.chunk.js": "/.well-known/service/static/static/js/3593.98d9341a.chunk.js",
29
- "static/css/5355.c4fb5c4a.chunk.css": "/.well-known/service/static/static/css/5355.c4fb5c4a.chunk.css",
30
- "static/js/5355.cc6d4f2b.chunk.js": "/.well-known/service/static/static/js/5355.cc6d4f2b.chunk.js",
29
+ "static/css/4802.bf353f58.chunk.css": "/.well-known/service/static/static/css/4802.bf353f58.chunk.css",
30
+ "static/js/4802.4e44fe6c.chunk.js": "/.well-known/service/static/static/js/4802.4e44fe6c.chunk.js",
31
31
  "static/js/6771.dfad334c.chunk.js": "/.well-known/service/static/static/js/6771.dfad334c.chunk.js",
32
32
  "static/css/5982.ac464505.chunk.css": "/.well-known/service/static/static/css/5982.ac464505.chunk.css",
33
33
  "static/js/5982.e80abbc4.chunk.js": "/.well-known/service/static/static/js/5982.e80abbc4.chunk.js",
34
34
  "static/js/4023.cb71646d.chunk.js": "/.well-known/service/static/static/js/4023.cb71646d.chunk.js",
35
35
  "static/js/6452.c7f6c102.chunk.js": "/.well-known/service/static/static/js/6452.c7f6c102.chunk.js",
36
- "static/js/1565.77a767e9.chunk.js": "/.well-known/service/static/static/js/1565.77a767e9.chunk.js",
36
+ "static/js/1565.a5a98618.chunk.js": "/.well-known/service/static/static/js/1565.a5a98618.chunk.js",
37
37
  "static/js/2393.9c045444.chunk.js": "/.well-known/service/static/static/js/2393.9c045444.chunk.js",
38
38
  "static/js/5683.7e2e9b58.chunk.js": "/.well-known/service/static/static/js/5683.7e2e9b58.chunk.js",
39
39
  "static/js/2100.1e7f0c60.chunk.js": "/.well-known/service/static/static/js/2100.1e7f0c60.chunk.js",
@@ -56,23 +56,23 @@
56
56
  "static/js/7606.25231f8c.chunk.js": "/.well-known/service/static/static/js/7606.25231f8c.chunk.js",
57
57
  "static/js/6921.3ab94bf5.chunk.js": "/.well-known/service/static/static/js/6921.3ab94bf5.chunk.js",
58
58
  "static/js/8143.5bd71f08.chunk.js": "/.well-known/service/static/static/js/8143.5bd71f08.chunk.js",
59
- "static/js/1546.2866cfc3.chunk.js": "/.well-known/service/static/static/js/1546.2866cfc3.chunk.js",
60
- "static/js/7524.de240f40.chunk.js": "/.well-known/service/static/static/js/7524.de240f40.chunk.js",
61
- "static/css/7272.0ae9f678.chunk.css": "/.well-known/service/static/static/css/7272.0ae9f678.chunk.css",
62
- "static/js/7272.c85146f8.chunk.js": "/.well-known/service/static/static/js/7272.c85146f8.chunk.js",
59
+ "static/js/6498.bd96fa39.chunk.js": "/.well-known/service/static/static/js/6498.bd96fa39.chunk.js",
60
+ "static/css/2784.1780cb4a.chunk.css": "/.well-known/service/static/static/css/2784.1780cb4a.chunk.css",
61
+ "static/js/2784.b037c6d1.chunk.js": "/.well-known/service/static/static/js/2784.b037c6d1.chunk.js",
63
62
  "static/js/8128.e95991f7.chunk.js": "/.well-known/service/static/static/js/8128.e95991f7.chunk.js",
64
63
  "static/js/6700.6c404ac2.chunk.js": "/.well-known/service/static/static/js/6700.6c404ac2.chunk.js",
65
- "static/js/878.daf9064b.chunk.js": "/.well-known/service/static/static/js/878.daf9064b.chunk.js",
66
- "static/js/4422.f79c1ff1.chunk.js": "/.well-known/service/static/static/js/4422.f79c1ff1.chunk.js",
64
+ "static/js/6640.14ab87a4.chunk.js": "/.well-known/service/static/static/js/6640.14ab87a4.chunk.js",
65
+ "static/js/7465.b76f2c39.chunk.js": "/.well-known/service/static/static/js/7465.b76f2c39.chunk.js",
67
66
  "static/js/252.27d0e320.chunk.js": "/.well-known/service/static/static/js/252.27d0e320.chunk.js",
68
67
  "static/js/617.ecc73170.chunk.js": "/.well-known/service/static/static/js/617.ecc73170.chunk.js",
69
- "static/js/926.2a63d835.chunk.js": "/.well-known/service/static/static/js/926.2a63d835.chunk.js",
70
- "static/js/5299.cf6e20df.chunk.js": "/.well-known/service/static/static/js/5299.cf6e20df.chunk.js",
68
+ "static/js/7310.1163692a.chunk.js": "/.well-known/service/static/static/js/7310.1163692a.chunk.js",
69
+ "static/js/3620.da2326b7.chunk.js": "/.well-known/service/static/static/js/3620.da2326b7.chunk.js",
70
+ "static/js/4461.d7dcfc2f.chunk.js": "/.well-known/service/static/static/js/4461.d7dcfc2f.chunk.js",
71
71
  "static/js/5645.3c5c0f93.chunk.js": "/.well-known/service/static/static/js/5645.3c5c0f93.chunk.js",
72
72
  "static/js/3038.8cbed218.chunk.js": "/.well-known/service/static/static/js/3038.8cbed218.chunk.js",
73
73
  "static/css/3154.e954fcda.chunk.css": "/.well-known/service/static/static/css/3154.e954fcda.chunk.css",
74
74
  "static/js/9657.e974d577.chunk.js": "/.well-known/service/static/static/js/9657.e974d577.chunk.js",
75
- "static/js/5541.aec2d90d.chunk.js": "/.well-known/service/static/static/js/5541.aec2d90d.chunk.js",
75
+ "static/js/6868.8289e873.chunk.js": "/.well-known/service/static/static/js/6868.8289e873.chunk.js",
76
76
  "static/media/ubuntu-mono-all-400-normal.woff": "/.well-known/service/static/static/media/ubuntu-mono-all-400-normal.c879328bc62e9c68268f.woff",
77
77
  "service-worker.js": "/.well-known/service/static/service-worker.js",
78
78
  "static/media/lato-all-400-normal.woff": "/.well-known/service/static/static/media/lato-all-400-normal.3dc1eff492ab1f598560.woff",
@@ -97,16 +97,16 @@
97
97
  "index.html": "/.well-known/service/static/index.html",
98
98
  "static/media/space-connected.svg": "/.well-known/service/static/static/media/space-connected.9a4e18fd2bc7d065191b0d241a131c28.svg",
99
99
  "main.7ea79dc8.css.map": "/.well-known/service/static/static/css/main.7ea79dc8.css.map",
100
- "main.e324f949.js.map": "/.well-known/service/static/static/js/main.e324f949.js.map",
100
+ "main.2c491798.js.map": "/.well-known/service/static/static/js/main.2c491798.js.map",
101
101
  "4716.60c7a9b1.chunk.js.map": "/.well-known/service/static/static/js/4716.60c7a9b1.chunk.js.map",
102
102
  "6856.01a0c9a2.chunk.js.map": "/.well-known/service/static/static/js/6856.01a0c9a2.chunk.js.map",
103
103
  "1660.c490fcee.chunk.js.map": "/.well-known/service/static/static/js/1660.c490fcee.chunk.js.map",
104
104
  "9899.eb448353.chunk.js.map": "/.well-known/service/static/static/js/9899.eb448353.chunk.js.map",
105
105
  "6737.597a5126.chunk.js.map": "/.well-known/service/static/static/js/6737.597a5126.chunk.js.map",
106
- "1760.f694de7c.chunk.js.map": "/.well-known/service/static/static/js/1760.f694de7c.chunk.js.map",
106
+ "1760.7726694e.chunk.js.map": "/.well-known/service/static/static/js/1760.7726694e.chunk.js.map",
107
107
  "9620.c8f2696a.chunk.js.map": "/.well-known/service/static/static/js/9620.c8f2696a.chunk.js.map",
108
108
  "1480.35a3e406.chunk.js.map": "/.well-known/service/static/static/js/1480.35a3e406.chunk.js.map",
109
- "6186.d46ba024.chunk.js.map": "/.well-known/service/static/static/js/6186.d46ba024.chunk.js.map",
109
+ "6186.e4739d35.chunk.js.map": "/.well-known/service/static/static/js/6186.e4739d35.chunk.js.map",
110
110
  "4682.23dd054e.chunk.js.map": "/.well-known/service/static/static/js/4682.23dd054e.chunk.js.map",
111
111
  "6711.38948be4.chunk.js.map": "/.well-known/service/static/static/js/6711.38948be4.chunk.js.map",
112
112
  "8437.0d88b9db.chunk.js.map": "/.well-known/service/static/static/js/8437.0d88b9db.chunk.js.map",
@@ -114,22 +114,22 @@
114
114
  "5434.523d071d.chunk.js.map": "/.well-known/service/static/static/js/5434.523d071d.chunk.js.map",
115
115
  "9409.21bf1e37.chunk.js.map": "/.well-known/service/static/static/js/9409.21bf1e37.chunk.js.map",
116
116
  "5859.b3338b24.chunk.js.map": "/.well-known/service/static/static/js/5859.b3338b24.chunk.js.map",
117
- "3551.4fc28c54.chunk.js.map": "/.well-known/service/static/static/js/3551.4fc28c54.chunk.js.map",
118
- "1980.79862e88.chunk.js.map": "/.well-known/service/static/static/js/1980.79862e88.chunk.js.map",
117
+ "5628.01088d1b.chunk.js.map": "/.well-known/service/static/static/js/5628.01088d1b.chunk.js.map",
118
+ "1980.ff084f4c.chunk.js.map": "/.well-known/service/static/static/js/1980.ff084f4c.chunk.js.map",
119
119
  "861.2a22cbbf.chunk.js.map": "/.well-known/service/static/static/js/861.2a22cbbf.chunk.js.map",
120
120
  "5176.98a62a22.chunk.js.map": "/.well-known/service/static/static/js/5176.98a62a22.chunk.js.map",
121
121
  "9102.7087c66c.chunk.js.map": "/.well-known/service/static/static/js/9102.7087c66c.chunk.js.map",
122
- "6326.3a3cb154.chunk.js.map": "/.well-known/service/static/static/js/6326.3a3cb154.chunk.js.map",
123
- "2653.4f690d53.chunk.js.map": "/.well-known/service/static/static/js/2653.4f690d53.chunk.js.map",
122
+ "3688.0122dfcd.chunk.js.map": "/.well-known/service/static/static/js/3688.0122dfcd.chunk.js.map",
123
+ "2653.892d84ff.chunk.js.map": "/.well-known/service/static/static/js/2653.892d84ff.chunk.js.map",
124
124
  "3593.98d9341a.chunk.js.map": "/.well-known/service/static/static/js/3593.98d9341a.chunk.js.map",
125
- "5355.c4fb5c4a.chunk.css.map": "/.well-known/service/static/static/css/5355.c4fb5c4a.chunk.css.map",
126
- "5355.cc6d4f2b.chunk.js.map": "/.well-known/service/static/static/js/5355.cc6d4f2b.chunk.js.map",
125
+ "4802.bf353f58.chunk.css.map": "/.well-known/service/static/static/css/4802.bf353f58.chunk.css.map",
126
+ "4802.4e44fe6c.chunk.js.map": "/.well-known/service/static/static/js/4802.4e44fe6c.chunk.js.map",
127
127
  "6771.dfad334c.chunk.js.map": "/.well-known/service/static/static/js/6771.dfad334c.chunk.js.map",
128
128
  "5982.ac464505.chunk.css.map": "/.well-known/service/static/static/css/5982.ac464505.chunk.css.map",
129
129
  "5982.e80abbc4.chunk.js.map": "/.well-known/service/static/static/js/5982.e80abbc4.chunk.js.map",
130
130
  "4023.cb71646d.chunk.js.map": "/.well-known/service/static/static/js/4023.cb71646d.chunk.js.map",
131
131
  "6452.c7f6c102.chunk.js.map": "/.well-known/service/static/static/js/6452.c7f6c102.chunk.js.map",
132
- "1565.77a767e9.chunk.js.map": "/.well-known/service/static/static/js/1565.77a767e9.chunk.js.map",
132
+ "1565.a5a98618.chunk.js.map": "/.well-known/service/static/static/js/1565.a5a98618.chunk.js.map",
133
133
  "2393.9c045444.chunk.js.map": "/.well-known/service/static/static/js/2393.9c045444.chunk.js.map",
134
134
  "5683.7e2e9b58.chunk.js.map": "/.well-known/service/static/static/js/5683.7e2e9b58.chunk.js.map",
135
135
  "2100.1e7f0c60.chunk.js.map": "/.well-known/service/static/static/js/2100.1e7f0c60.chunk.js.map",
@@ -152,26 +152,26 @@
152
152
  "7606.25231f8c.chunk.js.map": "/.well-known/service/static/static/js/7606.25231f8c.chunk.js.map",
153
153
  "6921.3ab94bf5.chunk.js.map": "/.well-known/service/static/static/js/6921.3ab94bf5.chunk.js.map",
154
154
  "8143.5bd71f08.chunk.js.map": "/.well-known/service/static/static/js/8143.5bd71f08.chunk.js.map",
155
- "1546.2866cfc3.chunk.js.map": "/.well-known/service/static/static/js/1546.2866cfc3.chunk.js.map",
156
- "7524.de240f40.chunk.js.map": "/.well-known/service/static/static/js/7524.de240f40.chunk.js.map",
157
- "7272.0ae9f678.chunk.css.map": "/.well-known/service/static/static/css/7272.0ae9f678.chunk.css.map",
158
- "7272.c85146f8.chunk.js.map": "/.well-known/service/static/static/js/7272.c85146f8.chunk.js.map",
155
+ "6498.bd96fa39.chunk.js.map": "/.well-known/service/static/static/js/6498.bd96fa39.chunk.js.map",
156
+ "2784.1780cb4a.chunk.css.map": "/.well-known/service/static/static/css/2784.1780cb4a.chunk.css.map",
157
+ "2784.b037c6d1.chunk.js.map": "/.well-known/service/static/static/js/2784.b037c6d1.chunk.js.map",
159
158
  "8128.e95991f7.chunk.js.map": "/.well-known/service/static/static/js/8128.e95991f7.chunk.js.map",
160
159
  "6700.6c404ac2.chunk.js.map": "/.well-known/service/static/static/js/6700.6c404ac2.chunk.js.map",
161
- "878.daf9064b.chunk.js.map": "/.well-known/service/static/static/js/878.daf9064b.chunk.js.map",
162
- "4422.f79c1ff1.chunk.js.map": "/.well-known/service/static/static/js/4422.f79c1ff1.chunk.js.map",
160
+ "6640.14ab87a4.chunk.js.map": "/.well-known/service/static/static/js/6640.14ab87a4.chunk.js.map",
161
+ "7465.b76f2c39.chunk.js.map": "/.well-known/service/static/static/js/7465.b76f2c39.chunk.js.map",
163
162
  "252.27d0e320.chunk.js.map": "/.well-known/service/static/static/js/252.27d0e320.chunk.js.map",
164
163
  "617.ecc73170.chunk.js.map": "/.well-known/service/static/static/js/617.ecc73170.chunk.js.map",
165
- "926.2a63d835.chunk.js.map": "/.well-known/service/static/static/js/926.2a63d835.chunk.js.map",
166
- "5299.cf6e20df.chunk.js.map": "/.well-known/service/static/static/js/5299.cf6e20df.chunk.js.map",
164
+ "7310.1163692a.chunk.js.map": "/.well-known/service/static/static/js/7310.1163692a.chunk.js.map",
165
+ "3620.da2326b7.chunk.js.map": "/.well-known/service/static/static/js/3620.da2326b7.chunk.js.map",
166
+ "4461.d7dcfc2f.chunk.js.map": "/.well-known/service/static/static/js/4461.d7dcfc2f.chunk.js.map",
167
167
  "5645.3c5c0f93.chunk.js.map": "/.well-known/service/static/static/js/5645.3c5c0f93.chunk.js.map",
168
168
  "3038.8cbed218.chunk.js.map": "/.well-known/service/static/static/js/3038.8cbed218.chunk.js.map",
169
169
  "3154.e954fcda.chunk.css.map": "/.well-known/service/static/static/css/3154.e954fcda.chunk.css.map",
170
170
  "9657.e974d577.chunk.js.map": "/.well-known/service/static/static/js/9657.e974d577.chunk.js.map",
171
- "5541.aec2d90d.chunk.js.map": "/.well-known/service/static/static/js/5541.aec2d90d.chunk.js.map"
171
+ "6868.8289e873.chunk.js.map": "/.well-known/service/static/static/js/6868.8289e873.chunk.js.map"
172
172
  },
173
173
  "entrypoints": [
174
174
  "static/css/main.7ea79dc8.css",
175
- "static/js/main.e324f949.js"
175
+ "static/js/main.2c491798.js"
176
176
  ]
177
177
  }
package/build/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico?imageFilter=resize&w=32"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"/><meta name="theme-color" content="#000000"/><title>Blocklet Service</title><link rel="manifest" href="/.well-known/service/manifest.json"/><script src="/.well-known/service/api/env"></script><script src="/__blocklet__.js"></script><script defer="defer" src="/.well-known/service/static/static/js/main.e324f949.js"></script><link href="/.well-known/service/static/static/css/main.7ea79dc8.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico?imageFilter=resize&w=32"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"/><meta name="theme-color" content="#000000"/><title>Blocklet Service</title><link rel="manifest" href="/.well-known/service/manifest.json"/><script src="/.well-known/service/api/env"></script><script src="/__blocklet__.js"></script><script defer="defer" src="/.well-known/service/static/static/js/main.2c491798.js"></script><link href="/.well-known/service/static/static/css/main.7ea79dc8.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>