@abtnode/blocklet-services 1.16.15-beta-d8e7b6c0 → 1.16.15-beta-9318a201

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.
package/README.md CHANGED
@@ -98,7 +98,6 @@ node.onReady(() => {
98
98
  - /api/did/switch-profile
99
99
  - /api/did/switch-passport
100
100
  - /api/did/fuel
101
- - /api/did/get-did-spaces-endpoint
102
101
 
103
102
  #### Websocket
104
103
 
package/api/index.js CHANGED
@@ -158,7 +158,22 @@ module.exports = function createServer(node, serverOptions = {}) {
158
158
  const event = BlockletInternalEvents[key];
159
159
  eventHub.on(event, (data) => {
160
160
  const { appDid } = data;
161
- notificationService.sendToApp.exec({ event, appDid, data });
161
+
162
+ // Let first worker process do something as master
163
+ if (process.env.NODE_ENV === 'test' || process.env.NODE_APP_INSTANCE === '0') {
164
+ if (event === BlockletInternalEvents.componentsUpdated) {
165
+ return;
166
+ }
167
+
168
+ notificationService.sendToAppComponents.exec({ event, appDid, data }).catch((error) => {
169
+ logger.error('send to component error', { error });
170
+ });
171
+ }
172
+
173
+ // backward compatibility, should be removed if BlockletSDK@1.6.14 is not supported anymore
174
+ notificationService.sendToApp.exec({ event, appDid, data }).catch((error) => {
175
+ logger.error('send to app error', { error });
176
+ });
162
177
  });
163
178
  });
164
179
 
package/api/libs/image.js CHANGED
@@ -2,6 +2,7 @@
2
2
  // @link https://sharp.pixelplumbing.com/
3
3
  const fs = require('fs-extra');
4
4
  const path = require('path');
5
+ const { rmSync } = require('fs');
5
6
  const sharp = require('sharp');
6
7
  const toLower = require('lodash/toLower');
7
8
  const { Joi } = require('@arcblock/validator');
@@ -193,7 +194,7 @@ const processImage = (src, extension, dest, params) => {
193
194
  dimensions.height = height;
194
195
  }
195
196
 
196
- const pipeline = sharp({ animated: true }).timeout({ seconds: 8 });
197
+ const pipeline = sharp({ animated: true }).timeout({ seconds: 30 });
197
198
  if (rotate) {
198
199
  pipeline.rotate(rotate);
199
200
  }
@@ -238,8 +239,15 @@ const processImage = (src, extension, dest, params) => {
238
239
 
239
240
  pipeline[format || EXTENSIONS[extension]]({ quality, progressive: !!progressive, force: true });
240
241
 
242
+ pipeline.on('error', (error) => {
243
+ reject(error);
244
+ });
245
+
241
246
  // run the pipeline
242
247
  src.pipe(pipeline).pipe(out);
248
+ }).catch((error) => {
249
+ rmSync(dest, { force: true });
250
+ throw error;
243
251
  });
244
252
  };
245
253
 
@@ -68,16 +68,16 @@ const getOgImage = (input, info, dataDir, format) => {
68
68
  if (error) {
69
69
  throw new Error(`open graph service params invalid: ${formatError(error)}`);
70
70
  }
71
+ if (value.template === 'cover') {
72
+ value.description = value.description || value.title;
73
+ value.title = info.name;
74
+ }
71
75
  if (!value.title) {
72
76
  value.title = info.name;
73
77
  }
74
78
  if (!value.description) {
75
79
  value.description = info.description;
76
80
  }
77
- if (value.template === 'cover') {
78
- value.description = value.title;
79
- value.title = info.name;
80
- }
81
81
 
82
82
  const params = { ...value, width: 1200, height: 630, color, logoUrl, format };
83
83
  const cacheKey = md5(stringify(params));
@@ -7,6 +7,14 @@ const join = (strings, ...values) => {
7
7
  return original;
8
8
  };
9
9
 
10
+ const getTextColor = (background) => {
11
+ const r = parseInt(background.slice(1, 3), 16);
12
+ const g = parseInt(background.slice(3, 5), 16);
13
+ const b = parseInt(background.slice(5, 7), 16);
14
+ const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
15
+ return luminance > 0.5 ? '#111' : '#EEE';
16
+ };
17
+
10
18
  const getLogoSvg = (color) => {
11
19
  return `<svg
12
20
  xmlns="http://www.w3.org/2000/svg"
@@ -45,14 +53,13 @@ const getDefaultTemplate = ({ width, height, logoUrl, format, color, title, desc
45
53
  />
46
54
  <h2
47
55
  style="
48
- font-size: 4.8rem;
56
+ font-size: 3rem;
49
57
  letter-spacing: -2px;
50
58
  margin: 32px 0;
51
59
  color: #ddd;
52
60
  font-weight: 400;
53
61
  font-family: Arial, sans-serif;
54
62
  text-align: left;
55
- text-transform: capitalize;
56
63
  padding: 0 96px;
57
64
  "
58
65
  >
@@ -60,7 +67,7 @@ const getDefaultTemplate = ({ width, height, logoUrl, format, color, title, desc
60
67
  </h2>
61
68
  <h3
62
69
  style="
63
- font-size: 2.4rem;
70
+ font-size: 2rem;
64
71
  margin: 0;
65
72
  color: #aaa;
66
73
  font-weight: 400;
@@ -92,16 +99,17 @@ const getSectionTemplate = ({ width, height, logoUrl, color, format, title, desc
92
99
  src="${logoUrl}"
93
100
  height="90"
94
101
  width="90"
95
- style="margin-left: 96px; height: 90px; width: 90px; margin-bottom: 96px"
102
+ style="margin-left: 96px; height: 90px; width: 90px; margin-bottom: 64px"
96
103
  />
97
104
  <p
98
105
  style="
99
- font-size: 1.8rem;
106
+ font-size: 1.5rem;
100
107
  margin: 0;
101
108
  color: ${color.start};
102
109
  font-weight: 400;
103
110
  font-family: Arial, sans-serif;
104
111
  text-align: left;
112
+ text-transform: uppercase;
105
113
  padding: 0 96px;
106
114
  "
107
115
  >
@@ -109,28 +117,29 @@ const getSectionTemplate = ({ width, height, logoUrl, color, format, title, desc
109
117
  </p>
110
118
  <h2
111
119
  style="
112
- font-size: 4.8rem;
120
+ font-size: 3rem;
113
121
  margin: 32px 0;
114
122
  color: #eee;
115
123
  letter-spacing: -2px;
116
124
  font-weight: 400;
117
125
  font-family: Arial, sans-serif;
118
- text-align: center;
119
- text-transform: capitalize;
126
+ text-align: left;
120
127
  padding: 0 96px;
128
+ lineClamp: 2;
121
129
  "
122
130
  >
123
131
  ${title}
124
132
  </h2>
125
133
  <h3
126
134
  style="
127
- font-size: 2.4rem;
135
+ font-size: 2rem;
128
136
  margin: 0;
129
137
  color: #bbb;
130
138
  font-weight: 400;
131
139
  font-family: Arial, sans-serif;
132
140
  text-align: left;
133
141
  padding: 0 96px;
142
+ lineClamp: 3;
134
143
  "
135
144
  >
136
145
  ${description}
@@ -140,16 +149,17 @@ const getSectionTemplate = ({ width, height, logoUrl, color, format, title, desc
140
149
  };
141
150
 
142
151
  const getCoverTemplate = ({ width, height, logoUrl, color, title, description, cover }, fn) => {
152
+ const textColor = getTextColor(color.start);
143
153
  return fn`<div style="width: ${width}px; height: ${height}px; display: flex; background: ${color.start};">
144
154
  <div style="display: flex; height: ${height}px; background: ${color.start}; width: 45%">
145
155
  <div style="margin-left: 32px; display: flex; flex-direction: column; align-items: flex-start; justify-content: space-around;">
146
156
  <h2
147
157
  style="
148
- font-size: 3.6rem;
149
- color: #ddd;
158
+ font-size: 3rem;
159
+ color: ${textColor};
150
160
  font-weight: 400;
151
161
  font-family: Arial, sans-serif;
152
- margin: 32px 0 0;
162
+ margin: 32px 32px 0 0;
153
163
  text-align: left;
154
164
  "
155
165
  >
@@ -161,7 +171,7 @@ const getCoverTemplate = ({ width, height, logoUrl, color, title, description, c
161
171
  style="
162
172
  font-size: 2rem;
163
173
  margin: 0 0 0 16px;
164
- color: #ddd;
174
+ color: ${textColor};
165
175
  font-weight: 400;
166
176
  font-family: Arial, sans-serif;
167
177
  text-align: left;
@@ -179,10 +189,10 @@ const getCoverTemplate = ({ width, height, logoUrl, color, title, description, c
179
189
  display: flex;
180
190
  background: ${color.start};
181
191
  height: ${height * 2}px;
182
- width: 125px;
192
+ width: 100px;
183
193
  position: absolute;
184
- transform: rotate(10deg);
185
- left: -120px;
194
+ transform: rotate(8deg);
195
+ left: -90px;
186
196
  top: -25px;"></div>
187
197
  </div>
188
198
  </div>`;
@@ -1,5 +1,4 @@
1
1
  const isUrl = require('is-url');
2
- const joinUrl = require('url-join');
3
2
 
4
3
  /**
5
4
  * @description
@@ -14,20 +13,6 @@ function getDIDSpacesUrlFromDisplayUrl(endpoint) {
14
13
  return endpoint.replace(/\/api\/.+/, '');
15
14
  }
16
15
 
17
- /**
18
- * @description
19
- * @param {string} spacesUrl
20
- * @return {string}
21
- */
22
- function getDIDSpacesSilentAuthorizationFromUrl(spacesUrl) {
23
- if (!isUrl(spacesUrl)) {
24
- throw new Error(`SpacesUrl(${spacesUrl}) is not a valid url`);
25
- }
26
-
27
- return joinUrl(spacesUrl, '/api/space/silent-authorization');
28
- }
29
-
30
16
  module.exports = {
31
17
  getDIDSpacesUrlFromDisplayUrl,
32
- getDIDSpacesSilentAuthorizationFromUrl,
33
18
  };
@@ -38,7 +38,6 @@ const createReceiveTransferAppOwnerRoutes = require('./connect/receive-transfer-
38
38
  const createSessionRoutes = require('./session');
39
39
  const createPassportRoutes = require('./passport');
40
40
  const { getRedirectUrl } = require('../../util');
41
- const createGetDIDSpacesEndpointRoutes = require('./connect/get-did-spaces-endpoint');
42
41
  const { sessionCacheDisabledUser } = require('../../cache');
43
42
 
44
43
  const getTokenFromWsConnect = (req, options) => {
@@ -191,7 +190,6 @@ const init = ({ node, options }) => {
191
190
  handler.attach(Object.assign({ app }, createMigrateToStructV2Routes(node, options)));
192
191
  handler.attach(Object.assign({ app }, createTransferAppOwnerRoutes(node, options)));
193
192
  handler.attach(Object.assign({ app }, createReceiveTransferAppOwnerRoutes(node, options, createSessionToken)));
194
- handler.attach(Object.assign({ app }, createGetDIDSpacesEndpointRoutes(node, options, createSessionToken)));
195
193
  });
196
194
  };
197
195
 
@@ -10,6 +10,7 @@ const states = require('../../state');
10
10
  const { PREFIXES } = require('../../util/constants');
11
11
 
12
12
  const { sendToAppChannel } = require('../../socket/channel/app');
13
+ const { sendToAppComponents } = require('../../socket/channel/component');
13
14
  const { sendToUserDid, sendToAppDid } = require('../../socket/channel/did');
14
15
  const getHooksByChannel = require('../../socket/channel/hooks');
15
16
  const { getTokenInfo } = require('../../socket/util');
@@ -151,6 +152,10 @@ const init = ({ node }) => {
151
152
  exec: ({ event, appDid, data }) => sendToAppDid({ event, appDid, data, node, wsServer }),
152
153
  },
153
154
 
155
+ sendToAppComponents: {
156
+ exec: ({ event, appDid, data }) => sendToAppComponents({ event, appDid, data, node, wsServer }),
157
+ },
158
+
154
159
  sendToAppChannel: {
155
160
  attach: (app) => {
156
161
  PREFIXES.forEach((prefix) => {
@@ -0,0 +1,112 @@
1
+ const JWT = require('@arcblock/jwt');
2
+ const { CHANNEL_TYPE, parseChannel, getComponentChannel } = require('@blocklet/meta/lib/channel');
3
+ const { findComponentByIdV2 } = require('@blocklet/meta/lib/util');
4
+ const { getComponentApiKey } = require('@abtnode/util/lib/blocklet');
5
+ const Lock = require('@abtnode/util/lib/lock');
6
+
7
+ const logger = require('@abtnode/logger')('channel:component');
8
+ const { getSenderServer, broadcast } = require('../util');
9
+ const states = require('../../state');
10
+
11
+ const lock = new Lock('');
12
+
13
+ const getCacheId = (appDid, componentDid) => `${appDid}/${componentDid}`;
14
+
15
+ const onAuthenticate = async ({ channel, payload, node }) => {
16
+ const { type, appDid, componentDid } = parseChannel(channel);
17
+ if (type !== CHANNEL_TYPE.COMPONENT) {
18
+ throw new Error(`Can not join non-component channel: ${channel}`);
19
+ }
20
+
21
+ const { apiKey } = payload;
22
+
23
+ const app = await node.getBlocklet({ did: appDid, useCache: true });
24
+
25
+ if (!app) {
26
+ throw new Error(`App not found: ${appDid}`);
27
+ }
28
+
29
+ const component = findComponentByIdV2(app, componentDid);
30
+
31
+ if (!component) {
32
+ throw new Error(`Component not found: ${appDid}/${componentDid}`);
33
+ }
34
+
35
+ const nodeInfo = await node.getNodeInfo({ useCache: true });
36
+
37
+ if (getComponentApiKey({ serverSk: nodeInfo.sk, app, component }) !== apiKey) {
38
+ throw new Error(`Invalid API key. app: ${appDid}, component: ${componentDid}`);
39
+ }
40
+ };
41
+
42
+ const sendCachedMessages = async (wsServer, appDid, componentDid) => {
43
+ await lock.acquire();
44
+ try {
45
+ const cacheId = getCacheId(appDid, componentDid);
46
+ const messages = await states.message.find({ did: cacheId });
47
+ if (messages.length) {
48
+ messages.forEach(({ event, data }) => {
49
+ wsServer.broadcast(getComponentChannel(appDid, componentDid), event, data, { noCluster: true });
50
+ });
51
+
52
+ await states.message.remove({ did: cacheId });
53
+ }
54
+
55
+ lock.release();
56
+ } catch (error) {
57
+ lock.release();
58
+ logger.error('Error on sending cached messages to component', { appDid, componentDid, error });
59
+ }
60
+ };
61
+
62
+ const onJoin = async ({ channel, wsServer }) => {
63
+ const { appDid, componentDid } = parseChannel(channel);
64
+ if (appDid && componentDid) {
65
+ await sendCachedMessages(wsServer, appDid, componentDid);
66
+ } else {
67
+ throw new Error(`onJoin: Invalid channel: ${channel}`);
68
+ }
69
+ };
70
+
71
+ const onMessage = () => {};
72
+
73
+ const sendToAppComponents = async ({ event, appDid, data, node, wsServer }) => {
74
+ const senderInfo = await getSenderServer({ node });
75
+
76
+ const app = await node.getBlocklet({ did: appDid, useCache: true });
77
+
78
+ if (!app) {
79
+ throw new Error(`App not found: ${appDid}`);
80
+ }
81
+
82
+ const notification = {
83
+ data,
84
+ time: Date.now(),
85
+ sender: {
86
+ did: senderInfo.wallet.address,
87
+ pk: senderInfo.wallet.publicKey,
88
+ token: JWT.sign(senderInfo.wallet.address, senderInfo.wallet.secretKey),
89
+ name: senderInfo.name,
90
+ },
91
+ };
92
+
93
+ for (const component of app.children || []) {
94
+ const componentDid = component.meta.did;
95
+ // eslint-disable-next-line no-loop-func
96
+ broadcast(wsServer, getComponentChannel(appDid, componentDid), event, notification, async (count) => {
97
+ // FIXME @linchen 组件以 cluster 模式启动时, 是否确保所有组件实例都收到消息?
98
+ if (count <= 0) {
99
+ logger.info('Online component client was not found', { appDid, componentDid });
100
+ await lock.acquire();
101
+ try {
102
+ await states.message.insert({ did: getCacheId(appDid, componentDid), event, data: notification });
103
+ lock.release();
104
+ } catch (error) {
105
+ lock.release();
106
+ }
107
+ }
108
+ });
109
+ }
110
+ };
111
+
112
+ module.exports = { onAuthenticate, onJoin, onMessage, sendToAppComponents };
@@ -3,6 +3,7 @@ const { CHANNEL_TYPE, parseChannel } = require('@blocklet/meta/lib/channel');
3
3
  const AppChannel = require('./app');
4
4
  const DidChannel = require('./did');
5
5
  const ConnectChannel = require('./relay');
6
+ const ComponentChannel = require('./component');
6
7
 
7
8
  const getHooksByChannel = (channel) => {
8
9
  const { type } = parseChannel(channel);
@@ -15,6 +16,9 @@ const getHooksByChannel = (channel) => {
15
16
  if (type === CHANNEL_TYPE.RELAY) {
16
17
  return ConnectChannel;
17
18
  }
19
+ if (type === CHANNEL_TYPE.COMPONENT) {
20
+ return ComponentChannel;
21
+ }
18
22
 
19
23
  throw new Error('Unknown channel type');
20
24
  };
@@ -1,7 +1,7 @@
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.e29a7133.js",
4
+ "main.js": "/.well-known/service/static/static/js/main.dad0c18f.js",
5
5
  "static/js/4716.58477c5c.chunk.js": "/.well-known/service/static/static/js/4716.58477c5c.chunk.js",
6
6
  "static/js/6856.163537c7.chunk.js": "/.well-known/service/static/static/js/6856.163537c7.chunk.js",
7
7
  "static/js/1660.e2ff5a21.chunk.js": "/.well-known/service/static/static/js/1660.e2ff5a21.chunk.js",
@@ -18,7 +18,7 @@
18
18
  "static/js/5434.523d071d.chunk.js": "/.well-known/service/static/static/js/5434.523d071d.chunk.js",
19
19
  "static/js/9409.0d5d4de2.chunk.js": "/.well-known/service/static/static/js/9409.0d5d4de2.chunk.js",
20
20
  "static/js/5859.b3338b24.chunk.js": "/.well-known/service/static/static/js/5859.b3338b24.chunk.js",
21
- "static/js/3551.a3cfa6aa.chunk.js": "/.well-known/service/static/static/js/3551.a3cfa6aa.chunk.js",
21
+ "static/js/3551.49951db3.chunk.js": "/.well-known/service/static/static/js/3551.49951db3.chunk.js",
22
22
  "static/js/1980.79862e88.chunk.js": "/.well-known/service/static/static/js/1980.79862e88.chunk.js",
23
23
  "static/js/861.a19bf499.chunk.js": "/.well-known/service/static/static/js/861.a19bf499.chunk.js",
24
24
  "static/js/5176.9f08e927.chunk.js": "/.well-known/service/static/static/js/5176.9f08e927.chunk.js",
@@ -32,8 +32,8 @@
32
32
  "static/css/5982.ac464505.chunk.css": "/.well-known/service/static/static/css/5982.ac464505.chunk.css",
33
33
  "static/js/5982.19c5663f.chunk.js": "/.well-known/service/static/static/js/5982.19c5663f.chunk.js",
34
34
  "static/js/4023.f88d8f4b.chunk.js": "/.well-known/service/static/static/js/4023.f88d8f4b.chunk.js",
35
- "static/js/6869.08bd3d6f.chunk.js": "/.well-known/service/static/static/js/6869.08bd3d6f.chunk.js",
36
- "static/js/1565.f2e6e45e.chunk.js": "/.well-known/service/static/static/js/1565.f2e6e45e.chunk.js",
35
+ "static/js/6869.2fb2d274.chunk.js": "/.well-known/service/static/static/js/6869.2fb2d274.chunk.js",
36
+ "static/js/1565.74308e72.chunk.js": "/.well-known/service/static/static/js/1565.74308e72.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.46331372.chunk.js": "/.well-known/service/static/static/js/5683.46331372.chunk.js",
39
39
  "static/js/7.b3c58209.chunk.js": "/.well-known/service/static/static/js/7.b3c58209.chunk.js",
@@ -98,7 +98,7 @@
98
98
  "index.html": "/.well-known/service/static/index.html",
99
99
  "static/media/space-connected.svg": "/.well-known/service/static/static/media/space-connected.9a4e18fd2bc7d065191b0d241a131c28.svg",
100
100
  "main.7ea79dc8.css.map": "/.well-known/service/static/static/css/main.7ea79dc8.css.map",
101
- "main.e29a7133.js.map": "/.well-known/service/static/static/js/main.e29a7133.js.map",
101
+ "main.dad0c18f.js.map": "/.well-known/service/static/static/js/main.dad0c18f.js.map",
102
102
  "4716.58477c5c.chunk.js.map": "/.well-known/service/static/static/js/4716.58477c5c.chunk.js.map",
103
103
  "6856.163537c7.chunk.js.map": "/.well-known/service/static/static/js/6856.163537c7.chunk.js.map",
104
104
  "1660.e2ff5a21.chunk.js.map": "/.well-known/service/static/static/js/1660.e2ff5a21.chunk.js.map",
@@ -115,7 +115,7 @@
115
115
  "5434.523d071d.chunk.js.map": "/.well-known/service/static/static/js/5434.523d071d.chunk.js.map",
116
116
  "9409.0d5d4de2.chunk.js.map": "/.well-known/service/static/static/js/9409.0d5d4de2.chunk.js.map",
117
117
  "5859.b3338b24.chunk.js.map": "/.well-known/service/static/static/js/5859.b3338b24.chunk.js.map",
118
- "3551.a3cfa6aa.chunk.js.map": "/.well-known/service/static/static/js/3551.a3cfa6aa.chunk.js.map",
118
+ "3551.49951db3.chunk.js.map": "/.well-known/service/static/static/js/3551.49951db3.chunk.js.map",
119
119
  "1980.79862e88.chunk.js.map": "/.well-known/service/static/static/js/1980.79862e88.chunk.js.map",
120
120
  "861.a19bf499.chunk.js.map": "/.well-known/service/static/static/js/861.a19bf499.chunk.js.map",
121
121
  "5176.9f08e927.chunk.js.map": "/.well-known/service/static/static/js/5176.9f08e927.chunk.js.map",
@@ -129,8 +129,8 @@
129
129
  "5982.ac464505.chunk.css.map": "/.well-known/service/static/static/css/5982.ac464505.chunk.css.map",
130
130
  "5982.19c5663f.chunk.js.map": "/.well-known/service/static/static/js/5982.19c5663f.chunk.js.map",
131
131
  "4023.f88d8f4b.chunk.js.map": "/.well-known/service/static/static/js/4023.f88d8f4b.chunk.js.map",
132
- "6869.08bd3d6f.chunk.js.map": "/.well-known/service/static/static/js/6869.08bd3d6f.chunk.js.map",
133
- "1565.f2e6e45e.chunk.js.map": "/.well-known/service/static/static/js/1565.f2e6e45e.chunk.js.map",
132
+ "6869.2fb2d274.chunk.js.map": "/.well-known/service/static/static/js/6869.2fb2d274.chunk.js.map",
133
+ "1565.74308e72.chunk.js.map": "/.well-known/service/static/static/js/1565.74308e72.chunk.js.map",
134
134
  "2393.9c045444.chunk.js.map": "/.well-known/service/static/static/js/2393.9c045444.chunk.js.map",
135
135
  "5683.46331372.chunk.js.map": "/.well-known/service/static/static/js/5683.46331372.chunk.js.map",
136
136
  "7.b3c58209.chunk.js.map": "/.well-known/service/static/static/js/7.b3c58209.chunk.js.map",
@@ -174,6 +174,6 @@
174
174
  },
175
175
  "entrypoints": [
176
176
  "static/css/main.7ea79dc8.css",
177
- "static/js/main.e29a7133.js"
177
+ "static/js/main.dad0c18f.js"
178
178
  ]
179
179
  }
package/build/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><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.e29a7133.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"/><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.dad0c18f.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>