underpost 2.8.0 → 2.8.1

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 (33) hide show
  1. package/.vscode/settings.json +2 -1
  2. package/bin/deploy.js +2 -16
  3. package/bin/index.js +4 -5
  4. package/bin/util.js +18 -0
  5. package/conf.js +8 -1
  6. package/docker-compose.yml +1 -1
  7. package/package.json +11 -9
  8. package/src/client/components/core/Account.js +4 -2
  9. package/src/client/components/core/Auth.js +2 -2
  10. package/src/client/components/core/Css.js +1 -1
  11. package/src/client/components/core/Docs.js +2 -1
  12. package/src/client/components/core/JoyStick.js +8 -5
  13. package/src/client/components/core/Modal.js +7 -6
  14. package/src/client/components/core/Panel.js +1 -0
  15. package/src/client/components/core/PanelForm.js +7 -1
  16. package/src/client/components/core/SignUp.js +4 -1
  17. package/src/client/components/core/Translate.js +14 -0
  18. package/src/client/public/default/plantuml/client-conf.svg +1 -1
  19. package/src/client/public/default/plantuml/server-conf.svg +1 -1
  20. package/src/client/public/default/plantuml/server-schema.svg +1 -1
  21. package/src/client/public/default/plantuml/ssr-conf.svg +1 -1
  22. package/src/client/public/default/plantuml/ssr-schema.svg +1 -1
  23. package/src/client/services/core/core.service.js +2 -0
  24. package/src/client/ssr/body/CacheControl.js +2 -1
  25. package/src/client/ssr/body/DefaultSplashScreen.js +3 -3
  26. package/src/client/ssr/offline/Maintenance.js +63 -0
  27. package/src/client/sw/default.sw.js +23 -3
  28. package/src/index.js +8 -0
  29. package/src/server/client-build.js +5 -4
  30. package/src/server/client-icons.js +1 -1
  31. package/src/server/conf.js +3 -3
  32. package/src/server/logger.js +8 -6
  33. package/src/server/valkey.js +1 -0
@@ -62,15 +62,35 @@ self.addEventListener('fetch', (event) => {
62
62
  if (!preCachedResponse) throw new Error(error.message);
63
63
  return preCachedResponse;
64
64
  } catch (error) {
65
- console.error('Error opening cache for pre cached page', event.request.url, error);
65
+ console.error('Error opening cache for pre cached page', {
66
+ url: event.request.url,
67
+ error,
68
+ onLine: navigator.onLine,
69
+ });
66
70
  try {
71
+ if (!navigator.onLine) {
72
+ if (event.request.method.toUpperCase() === 'GET') {
73
+ const cache = await caches.open(CACHE_NAME);
74
+ const preCachedResponse = await cache.match(
75
+ `${PROXY_PATH === '/' ? '' : PROXY_PATH}/offline/index.html`,
76
+ );
77
+ if (!preCachedResponse) throw new Error(error.message);
78
+ return preCachedResponse;
79
+ }
80
+ const response = new Response(JSON.stringify({ status: 'error', message: 'offline test response' }));
81
+ // response.status = 200;
82
+ response.headers.set('Content-Type', 'application/json');
83
+ return response;
84
+ }
67
85
  if (event.request.method.toUpperCase() === 'GET') {
68
86
  const cache = await caches.open(CACHE_NAME);
69
- const preCachedResponse = await cache.match(`${PROXY_PATH === '/' ? '' : PROXY_PATH}/offline/index.html`);
87
+ const preCachedResponse = await cache.match(
88
+ `${PROXY_PATH === '/' ? '' : PROXY_PATH}/maintenance/index.html`,
89
+ );
70
90
  if (!preCachedResponse) throw new Error(error.message);
71
91
  return preCachedResponse;
72
92
  }
73
- const response = new Response(JSON.stringify({ status: 'error', message: 'offline test response' }));
93
+ const response = new Response(JSON.stringify({ status: 'error', message: 'server in maintenance' }));
74
94
  // response.status = 200;
75
95
  response.headers.set('Content-Type', 'application/json');
76
96
  return response;
package/src/index.js CHANGED
@@ -14,6 +14,14 @@ const logger = loggerFactory(import.meta);
14
14
  * @memberof Underpost
15
15
  */
16
16
  class Underpost {
17
+ /**
18
+ * Underpost engine version
19
+ * @static
20
+ * @type {String}
21
+ * @memberof Underpost
22
+ */
23
+ static version = 'v2.8.1';
24
+
17
25
  constructor() {}
18
26
 
19
27
  /**
@@ -465,10 +465,11 @@ const buildClient = async (options = { liveClientBuildPaths: [], instances: [] }
465
465
  case 'DefaultSplashScreen':
466
466
  if (backgroundImage) {
467
467
  ssrHeadComponents += SrrComponent({
468
- base64BackgroundImage: `data:image/${backgroundImage.split('.').pop()};base64,${fs
469
- .readFileSync(backgroundImage)
470
- .toString('base64')}`,
468
+ backgroundImage: (path === '/' ? path : `${path}/`) + backgroundImage,
471
469
  });
470
+ // `data:image/${backgroundImage.split('.').pop()};base64,${fs
471
+ // .readFileSync()
472
+ // .toString('base64')}`,
472
473
  break;
473
474
  } else {
474
475
  ssrHeadComponents += SrrComponent({ metadata });
@@ -480,7 +481,7 @@ const buildClient = async (options = { liveClientBuildPaths: [], instances: [] }
480
481
  bgColor: metadata?.themeColor ? metadata.themeColor : '#ececec',
481
482
  });
482
483
  ssrHeadComponents += SrrComponent({
483
- base64BackgroundImage: `data:image/png;base64,${bufferBackgroundImage.toString('base64')}`,
484
+ backgroundImage: `data:image/png;base64,${bufferBackgroundImage.toString('base64')}`,
484
485
  });
485
486
  }
486
487
 
@@ -141,7 +141,7 @@ const buildIcons = async ({
141
141
  for (const file of response.files)
142
142
  fs.writeFileSync(`./src/client/public/${publicClientId}/${file.name}`, file.contents, 'utf8');
143
143
 
144
- const ssrPath = `./src/client/ssr/components/head/Pwa${getCapVariableName(publicClientId)}.js`;
144
+ const ssrPath = `./src/client/ssr/head/Pwa${getCapVariableName(publicClientId)}.js`;
145
145
  if (!fs.existsSync(ssrPath))
146
146
  fs.writeFileSync(ssrPath, 'SrrComponent = () => html`' + response.html.join(`\n`) + '`;', 'utf8');
147
147
  } catch (error) {
@@ -253,8 +253,8 @@ const buildClientSrc = async (
253
253
  }
254
254
 
255
255
  fs.writeFileSync(
256
- `./src/client/ssr/components/head/${toClientVariableName}Scripts.js`,
257
- formattedSrc(fs.readFileSync(`./src/client/ssr/components/head/${fromClientVariableName}Scripts.js`, 'utf8')),
256
+ `./src/client/ssr/head/${toClientVariableName}Scripts.js`,
257
+ formattedSrc(fs.readFileSync(`./src/client/ssr/head/${fromClientVariableName}Scripts.js`, 'utf8')),
258
258
  'utf8',
259
259
  );
260
260
 
@@ -473,7 +473,7 @@ const buildProxyRouter = () => {
473
473
  title: 'Site in maintenance',
474
474
  ssrPath: '/',
475
475
  ssrHeadComponents: '',
476
- ssrBodyComponents: (await ssrFactory(`./src/client/ssr/body/Maintenance.js`))(),
476
+ ssrBodyComponents: (await ssrFactory(`./src/client/ssr/offline/Maintenance.js`))(),
477
477
  });
478
478
  })();
479
479
 
@@ -86,6 +86,7 @@ const format = (meta) =>
86
86
  * @memberof Logger
87
87
  */
88
88
  const setUpInfo = async (logger = new winston.Logger()) => {
89
+ logger.info('npm_package_version', process.env.npm_package_version);
89
90
  logger.info('argv', process.argv);
90
91
  logger.info('platform', process.platform);
91
92
  logger.info('env', process.env.NODE_ENV);
@@ -179,12 +180,13 @@ const loggerMiddleware = (meta = { url: '' }) => {
179
180
  };
180
181
 
181
182
  const underpostASCI = () => `
182
- ▗▖ ▗▖▗▖ ▗▖▗▄▄▄ ▗▄▄▄▖▗▄▄▖ ▄▄▄▄ ▄▄▄ ▄▄▄ ■
183
- ▐▌ ▐▌▐▛▚▖▐▌▐▌ █ ▐▌ ▐▌ ▐▌█ █ █ █ ▀▄▄▗▄▟▙▄▖
184
- ▐▌ ▐▌▐▌ ▝▜▌▐▌ █ ▐▛▀▀▘▐▛▀▚▖█▄▄▄▀ ▀▄▄▄▀ ▄▄▄▀ ▐▌
185
- ▝▚▄▞▘▐▌ ▐▌▐▙▄▄▀ ▐▙▄▄▖▐▌ ▐▌█ ▐▌
186
- ▀ ▐▌
187
-
183
+
184
+ ██╗░░░██╗███╗░░██╗██████╗░███████╗██████╗░██████╗░░█████╗░░██████╗████████╗
185
+ ██║░░░██║████╗░██║██╔══██╗██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔════╝╚══██╔══╝
186
+ ██║░░░██║██╔██╗██║██║░░██║█████╗░░██████╔╝██████╔╝██║░░██║╚█████╗░░░░██║░░░
187
+ ██║░░░██║██║╚████║██║░░██║██╔══╝░░██╔══██╗██╔═══╝░██║░░██║░╚═══██╗░░░██║░░░
188
+ ╚██████╔╝██║░╚███║██████╔╝███████╗██║░░██║██║░░░░░╚█████╔╝██████╔╝░░░██║░░░
189
+ ░╚═════╝░╚═╝░░╚══╝╚═════╝░╚══════╝╚═╝░░╚═╝╚═╝░░░░░░╚════╝░╚═════╝░░░░╚═╝░░░
188
190
  `;
189
191
 
190
192
  export { loggerFactory, loggerMiddleware, setUpInfo, underpostASCI };
@@ -53,6 +53,7 @@ const getValkeyObject = async (key = '') => {
53
53
  try {
54
54
  return JSON.parse(object);
55
55
  } catch (error) {
56
+ logger.error(error);
56
57
  return object;
57
58
  }
58
59
  };