underpost 2.8.0 → 2.8.6
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/.dockerignore +1 -0
- package/.github/workflows/ghpkg.yml +19 -49
- package/.github/workflows/npmpkg.yml +67 -0
- package/.github/workflows/publish.yml +5 -5
- package/.github/workflows/pwa-microservices-template.page.yml +12 -4
- package/.github/workflows/pwa-microservices-template.test.yml +2 -2
- package/.vscode/extensions.json +17 -71
- package/.vscode/settings.json +20 -4
- package/AUTHORS.md +16 -5
- package/CHANGELOG.md +103 -3
- package/Dockerfile +24 -66
- package/README.md +1 -28
- package/bin/build.js +186 -0
- package/bin/db.js +2 -24
- package/bin/deploy.js +168 -157
- package/bin/file.js +59 -16
- package/bin/hwt.js +0 -10
- package/bin/index.js +201 -61
- package/bin/ssl.js +19 -11
- package/bin/util.js +24 -101
- package/bin/vs.js +26 -2
- package/conf.js +30 -132
- package/docker-compose.yml +1 -1
- package/manifests/deployment/mongo-express/deployment.yaml +60 -0
- package/manifests/deployment/phpmyadmin/deployment.yaml +54 -0
- package/manifests/kind-config-dev.yaml +12 -0
- package/manifests/kind-config.yaml +12 -0
- package/manifests/letsencrypt-prod.yaml +15 -0
- package/manifests/mariadb/config.yaml +10 -0
- package/manifests/mariadb/kustomization.yaml +9 -0
- package/manifests/mariadb/pv.yaml +12 -0
- package/manifests/mariadb/pvc.yaml +10 -0
- package/manifests/mariadb/secret.yaml +8 -0
- package/manifests/mariadb/service.yaml +10 -0
- package/manifests/mariadb/statefulset.yaml +55 -0
- package/manifests/mongodb/backup-access.yaml +16 -0
- package/manifests/mongodb/backup-cronjob.yaml +42 -0
- package/manifests/mongodb/backup-pv-pvc.yaml +22 -0
- package/manifests/mongodb/configmap.yaml +26 -0
- package/manifests/mongodb/headless-service.yaml +10 -0
- package/manifests/mongodb/kustomization.yaml +11 -0
- package/manifests/mongodb/pv-pvc.yaml +23 -0
- package/manifests/mongodb/statefulset.yaml +125 -0
- package/manifests/mongodb-4.4/kustomization.yaml +7 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +23 -0
- package/manifests/mongodb-4.4/service-deployment.yaml +63 -0
- package/manifests/valkey/kustomization.yaml +7 -0
- package/manifests/valkey/service.yaml +17 -0
- package/manifests/valkey/statefulset.yaml +39 -0
- package/package.json +133 -134
- package/src/api/core/core.service.js +1 -1
- package/src/api/user/user.model.js +16 -3
- package/src/api/user/user.service.js +1 -1
- package/src/cli/cluster.js +202 -0
- package/src/cli/cron.js +90 -0
- package/src/cli/db.js +212 -0
- package/src/cli/deploy.js +318 -0
- package/src/cli/env.js +52 -0
- package/src/cli/fs.js +149 -0
- package/src/cli/image.js +148 -0
- package/src/cli/repository.js +125 -0
- package/src/cli/script.js +53 -0
- package/src/cli/secrets.js +37 -0
- package/src/cli/test.js +118 -0
- package/src/client/components/core/Account.js +4 -2
- package/src/client/components/core/Auth.js +24 -6
- package/src/client/components/core/CalendarCore.js +127 -50
- package/src/client/components/core/CommonJs.js +282 -19
- package/src/client/components/core/Css.js +2 -1
- package/src/client/components/core/CssCore.js +8 -4
- package/src/client/components/core/Docs.js +1 -1
- package/src/client/components/core/DropDown.js +5 -1
- package/src/client/components/core/Input.js +22 -6
- package/src/client/components/core/JoyStick.js +8 -5
- package/src/client/components/core/LoadingAnimation.js +8 -1
- package/src/client/components/core/Modal.js +47 -18
- package/src/client/components/core/Panel.js +93 -31
- package/src/client/components/core/PanelForm.js +27 -19
- package/src/client/components/core/Scroll.js +1 -0
- package/src/client/components/core/SignUp.js +4 -1
- package/src/client/components/core/Translate.js +61 -9
- package/src/client/components/core/Validator.js +9 -1
- package/src/client/components/core/VanillaJs.js +0 -9
- package/src/client/components/core/Worker.js +34 -31
- package/src/client/public/default/plantuml/client-conf.svg +1 -1
- package/src/client/public/default/plantuml/server-conf.svg +1 -1
- package/src/client/public/default/plantuml/server-schema.svg +1 -1
- package/src/client/public/default/plantuml/ssr-conf.svg +1 -1
- package/src/client/public/default/plantuml/ssr-schema.svg +1 -1
- package/src/client/services/core/core.service.js +15 -8
- package/src/client/services/default/default.management.js +4 -2
- package/src/client/ssr/Render.js +4 -1
- package/src/client/ssr/body/CacheControl.js +2 -2
- package/src/client/ssr/body/DefaultSplashScreen.js +3 -3
- package/src/client/ssr/offline/Maintenance.js +63 -0
- package/src/client/sw/default.sw.js +26 -6
- package/src/db/mongo/MongooseDB.js +29 -1
- package/src/index.js +91 -17
- package/src/runtime/lampp/Lampp.js +1 -13
- package/src/runtime/xampp/Xampp.js +0 -13
- package/src/server/auth.js +3 -3
- package/src/server/backup.js +49 -93
- package/src/server/client-build.js +41 -50
- package/src/server/client-formatted.js +6 -3
- package/src/server/client-icons.js +1 -1
- package/src/server/conf.js +207 -57
- package/src/server/dns.js +30 -55
- package/src/server/downloader.js +0 -8
- package/src/server/logger.js +22 -15
- package/src/server/network.js +17 -43
- package/src/server/process.js +25 -2
- package/src/server/proxy.js +4 -26
- package/src/server/runtime.js +30 -30
- package/src/server/ssl.js +1 -1
- package/src/server/valkey.js +3 -0
- package/test/api.test.js +0 -8
- package/src/dns.js +0 -22
- package/src/server/prompt-optimizer.js +0 -28
- package/startup.js +0 -11
|
@@ -29,6 +29,8 @@ const PanelForm = {
|
|
|
29
29
|
Elements: {},
|
|
30
30
|
parentIdModal: undefined,
|
|
31
31
|
route: 'home',
|
|
32
|
+
htmlFormHeader: async () => '',
|
|
33
|
+
firsUpdateEvent: async () => {},
|
|
32
34
|
},
|
|
33
35
|
) {
|
|
34
36
|
const { idPanel, heightTopBar, heightBottomBar, defaultUrlImage, Elements } = options;
|
|
@@ -90,16 +92,7 @@ const PanelForm = {
|
|
|
90
92
|
},
|
|
91
93
|
},
|
|
92
94
|
];
|
|
93
|
-
|
|
94
|
-
html`<span
|
|
95
|
-
style="${renderCssAttr({
|
|
96
|
-
style: {
|
|
97
|
-
'font-size': '14px',
|
|
98
|
-
color: '#888',
|
|
99
|
-
},
|
|
100
|
-
})}"
|
|
101
|
-
>${new Date(date).toLocaleString().replaceAll(',', '')}</span
|
|
102
|
-
>`;
|
|
95
|
+
|
|
103
96
|
const titleIcon = html`<i class="fa-solid fa-quote-left"></i>`;
|
|
104
97
|
const panelRender = async ({ data }) =>
|
|
105
98
|
await Panel.Render({
|
|
@@ -108,6 +101,7 @@ const PanelForm = {
|
|
|
108
101
|
heightTopBar,
|
|
109
102
|
heightBottomBar,
|
|
110
103
|
data,
|
|
104
|
+
htmlFormHeader: options.htmlFormHeader,
|
|
111
105
|
parentIdModal: options.parentIdModal,
|
|
112
106
|
originData: () => PanelForm.Data[idPanel].originData,
|
|
113
107
|
filesData: () => PanelForm.Data[idPanel].filesData,
|
|
@@ -271,7 +265,7 @@ const PanelForm = {
|
|
|
271
265
|
fileId: file ? URL.createObjectURL(file) : undefined,
|
|
272
266
|
_id: documentData._id,
|
|
273
267
|
id: documentData._id,
|
|
274
|
-
createdAt:
|
|
268
|
+
createdAt: documentData.createdAt,
|
|
275
269
|
};
|
|
276
270
|
|
|
277
271
|
if (documentStatus === 'error') status = 'error';
|
|
@@ -376,7 +370,7 @@ const PanelForm = {
|
|
|
376
370
|
PanelForm.Data[idPanel].data.push({
|
|
377
371
|
id: documentObject._id,
|
|
378
372
|
title: documentObject.title,
|
|
379
|
-
createdAt:
|
|
373
|
+
createdAt: documentObject.createdAt,
|
|
380
374
|
tags: documentObject.tags.filter((t) => !prefixTags.includes(t)),
|
|
381
375
|
mdFileId: marked.parse(mdFileId),
|
|
382
376
|
userId: documentObject.userId._id,
|
|
@@ -430,33 +424,47 @@ const PanelForm = {
|
|
|
430
424
|
ssr: true,
|
|
431
425
|
})),
|
|
432
426
|
});
|
|
433
|
-
|
|
434
|
-
let
|
|
435
|
-
let lasUserId;
|
|
427
|
+
let delayBlock = false;
|
|
428
|
+
let firsUpdateEvent = false;
|
|
436
429
|
this.Data[idPanel].updatePanel = async () => {
|
|
430
|
+
if (delayBlock) return;
|
|
431
|
+
else {
|
|
432
|
+
delayBlock = true;
|
|
433
|
+
setTimeout(() => {
|
|
434
|
+
delayBlock = false;
|
|
435
|
+
}, 500);
|
|
436
|
+
}
|
|
437
437
|
const cid = getQueryParams().cid ? getQueryParams().cid : '';
|
|
438
|
-
if (lastCid === cid && lasUserId === Elements.Data.user.main.model.user._id) return;
|
|
439
438
|
if (options.route === 'home') Modal.homeCid = newInstance(cid);
|
|
440
|
-
lastCid = cid;
|
|
441
|
-
lasUserId = newInstance(Elements.Data.user.main.model.user._id);
|
|
442
439
|
htmls(`.${options.parentIdModal ? 'html-' + options.parentIdModal : 'main-body'}`, await renderSrrPanelData());
|
|
443
440
|
await getPanelData();
|
|
444
441
|
htmls(
|
|
445
442
|
`.${options.parentIdModal ? 'html-' + options.parentIdModal : 'main-body'}`,
|
|
446
443
|
await panelRender({ data: this.Data[idPanel].data }),
|
|
447
444
|
);
|
|
445
|
+
if (!firsUpdateEvent && options.firsUpdateEvent) {
|
|
446
|
+
firsUpdateEvent = true;
|
|
447
|
+
await options.firsUpdateEvent();
|
|
448
|
+
}
|
|
448
449
|
};
|
|
449
450
|
if (options.route)
|
|
450
451
|
listenQueryPathInstance({
|
|
451
452
|
id: options.parentIdModal ? 'html-' + options.parentIdModal : 'main-body',
|
|
452
453
|
routeId: options.route,
|
|
453
454
|
event: async (path) => {
|
|
455
|
+
// if (!PanelForm.Data[idPanel].sessionIn)
|
|
454
456
|
await this.Data[idPanel].updatePanel();
|
|
455
457
|
},
|
|
456
458
|
});
|
|
457
459
|
|
|
458
460
|
// if (options.route === 'home') setTimeout(this.Data[idPanel].updatePanel);
|
|
459
|
-
|
|
461
|
+
setTimeout(() => {
|
|
462
|
+
// if (
|
|
463
|
+
// options.route !== 'home' &&
|
|
464
|
+
// (!PanelForm.Data[idPanel].originData || PanelForm.Data[idPanel].originData.length === 0)
|
|
465
|
+
// )
|
|
466
|
+
this.Data[idPanel].updatePanel();
|
|
467
|
+
});
|
|
460
468
|
|
|
461
469
|
if (options.parentIdModal) {
|
|
462
470
|
htmls(`.html-${options.parentIdModal}`, await renderSrrPanelData());
|
|
@@ -52,7 +52,10 @@ const SignUp = {
|
|
|
52
52
|
: Translate.Render(`no-valid-register`),
|
|
53
53
|
status: result.status,
|
|
54
54
|
});
|
|
55
|
-
if (result.status === 'success')
|
|
55
|
+
if (result.status === 'success') {
|
|
56
|
+
await Auth.signUpToken(result);
|
|
57
|
+
s(`.btn-close-${options.idModal}`).click();
|
|
58
|
+
}
|
|
56
59
|
});
|
|
57
60
|
s(`.btn-sign-up-i-have-account`).onclick = () => {
|
|
58
61
|
s(`.main-btn-log-in`).click();
|
|
@@ -11,35 +11,49 @@ const Translate = {
|
|
|
11
11
|
Data: {},
|
|
12
12
|
Token: {},
|
|
13
13
|
Event: {},
|
|
14
|
+
Options: {},
|
|
14
15
|
Parse: function (lang) {
|
|
15
16
|
s('html').lang = lang;
|
|
16
17
|
Object.keys(this.Token).map((translateHash) => {
|
|
17
18
|
if (translateHash in this.Token && lang in this.Token[translateHash]) {
|
|
18
|
-
if (!('placeholder' in this.
|
|
19
|
-
htmls(
|
|
19
|
+
if (!('placeholder' in this.Options[translateHash]) && s(`.${translateHash}`))
|
|
20
|
+
htmls(
|
|
21
|
+
`.${translateHash}`,
|
|
22
|
+
this.Options[translateHash]?.disableTextFormat
|
|
23
|
+
? this.Token[translateHash][lang]
|
|
24
|
+
: textFormatted(this.Token[translateHash][lang]),
|
|
25
|
+
);
|
|
20
26
|
else if ('placeholder' in this.Token[translateHash] && s(this.Token[translateHash].placeholder))
|
|
21
|
-
s(this.Token[translateHash].placeholder).placeholder =
|
|
27
|
+
s(this.Token[translateHash].placeholder).placeholder = this.Options[translateHash]?.disableTextFormat
|
|
28
|
+
? this.Token[translateHash][lang]
|
|
29
|
+
: textFormatted(this.Token[translateHash][lang]);
|
|
22
30
|
}
|
|
23
31
|
});
|
|
24
32
|
for (const keyEvent of Object.keys(this.Event)) this.Event[keyEvent]();
|
|
25
33
|
},
|
|
26
|
-
Render: function (keyLang, placeholder) {
|
|
34
|
+
Render: function (keyLang, placeholder, options = { disableTextFormat: false }) {
|
|
27
35
|
if (!(keyLang in this.Data)) {
|
|
28
36
|
// TODO: add translate package or library for this case
|
|
29
37
|
logger.warn('translate key lang does not exist: ', keyLang);
|
|
30
|
-
return textFormatted(keyLang);
|
|
38
|
+
return options.disableTextFormat ? keyLang : textFormatted(keyLang);
|
|
31
39
|
}
|
|
32
40
|
if (placeholder) this.Data[keyLang].placeholder = placeholder;
|
|
33
41
|
keyLang = this.Data[keyLang];
|
|
34
42
|
const translateHash = getId(this.Token, 'trans');
|
|
43
|
+
this.Options[translateHash] = options;
|
|
35
44
|
this.Token[translateHash] = newInstance(keyLang);
|
|
36
45
|
if ('placeholder' in keyLang) {
|
|
37
|
-
if (s('html').lang in keyLang)
|
|
38
|
-
|
|
46
|
+
if (s('html').lang in keyLang)
|
|
47
|
+
return options.disableTextFormat ? keyLang[s('html').lang] : textFormatted(keyLang[s('html').lang]);
|
|
48
|
+
return options.disableTextFormat ? keyLang['en'] : textFormatted(keyLang['en']);
|
|
39
49
|
}
|
|
40
50
|
if (s('html').lang in keyLang)
|
|
41
|
-
return html`<span class="${translateHash}"
|
|
42
|
-
|
|
51
|
+
return html`<span class="${translateHash}"
|
|
52
|
+
>${options.disableTextFormat ? keyLang[s('html').lang] : textFormatted(keyLang[s('html').lang])}</span
|
|
53
|
+
>`;
|
|
54
|
+
return html`<span class="${translateHash}"
|
|
55
|
+
>${options.disableTextFormat ? keyLang['en'] : textFormatted(keyLang['en'])}</span
|
|
56
|
+
>`;
|
|
43
57
|
},
|
|
44
58
|
renderLang: function (language) {
|
|
45
59
|
localStorage.setItem('lang', language);
|
|
@@ -460,6 +474,44 @@ const TranslateCore = {
|
|
|
460
474
|
es: 'Carga completada',
|
|
461
475
|
};
|
|
462
476
|
Translate.Data['play'] = { es: 'Jugar', en: 'Play' };
|
|
477
|
+
Translate.Data['pause'] = { es: 'Pausar', en: 'Pause' };
|
|
478
|
+
Translate.Data['stop'] = { es: 'Parar', en: 'Stop' };
|
|
479
|
+
Translate.Data['previous'] = { es: 'Anterior', en: 'Previous' };
|
|
480
|
+
Translate.Data['next'] = { es: 'Siguiente', en: 'Next' };
|
|
481
|
+
Translate.Data['buy'] = { es: 'comprar', en: 'Buy' };
|
|
482
|
+
Translate.Data['sell'] = { es: 'Vender', en: 'sell' };
|
|
483
|
+
|
|
484
|
+
Translate.Data['monday'] = { es: 'Lunes', en: 'Monday' };
|
|
485
|
+
Translate.Data['tuesday'] = { es: 'Martes', en: 'Tuesday' };
|
|
486
|
+
Translate.Data['wednesday'] = { es: 'Miércoles', en: 'Wednesday' };
|
|
487
|
+
Translate.Data['thursday'] = { es: 'Jueves', en: 'Thursday' };
|
|
488
|
+
Translate.Data['friday'] = { es: 'Viernes', en: 'Friday' };
|
|
489
|
+
Translate.Data['saturday'] = { es: 'Sábado', en: 'Saturday' };
|
|
490
|
+
Translate.Data['sunday'] = { es: 'Domingo', en: 'Sunday' };
|
|
491
|
+
|
|
492
|
+
Translate.Data['description'] = { es: 'Descripción', en: 'Description' };
|
|
493
|
+
Translate.Data['daysOfWeek'] = { es: 'Días de la semana', en: 'Days of the week' };
|
|
494
|
+
Translate.Data['startTime'] = { es: 'Hora de inicio', en: 'Start time' };
|
|
495
|
+
Translate.Data['endTime'] = { es: 'Hora de finalizacion', en: 'End time' };
|
|
496
|
+
Translate.Data['appointment-scheduled'] = {
|
|
497
|
+
en: 'Your appointment has been scheduled',
|
|
498
|
+
es: 'Tu cita ha sido programada',
|
|
499
|
+
};
|
|
500
|
+
Translate.Data['info'] = { es: 'Información', en: 'Info' };
|
|
501
|
+
Translate.Data['complete-name'] = { es: 'Nombre completo', en: 'Complete name' };
|
|
502
|
+
Translate.Data['identityDocument'] = { es: 'Rut', en: 'Identity document' };
|
|
503
|
+
Translate.Data['day'] = { es: 'Día', en: 'Day' };
|
|
504
|
+
Translate.Data['month'] = { es: 'Mes', en: 'Month' };
|
|
505
|
+
Translate.Data['year'] = { es: 'Año', en: 'Year' };
|
|
506
|
+
Translate.Data['phone'] = { es: 'Teléfono', en: 'Phone' };
|
|
507
|
+
Translate.Data['invalid-identity-document'] = {
|
|
508
|
+
en: 'Invalid identity document',
|
|
509
|
+
es: 'Documento de identidad inválido',
|
|
510
|
+
};
|
|
511
|
+
Translate.Data['expired-session'] = {
|
|
512
|
+
en: 'Your session has expired. Please log in again.',
|
|
513
|
+
es: 'Su sesión ha expirado. Por favor, inicie sesión de nuevo.',
|
|
514
|
+
};
|
|
463
515
|
},
|
|
464
516
|
};
|
|
465
517
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { validatePassword } from './CommonJs.js';
|
|
1
|
+
import { isChileanIdentityDocument, validatePassword } from './CommonJs.js';
|
|
2
2
|
import { renderStatus } from './Css.js';
|
|
3
3
|
import { loggerFactory } from './Logger.js';
|
|
4
4
|
import { textFormatted, Translate } from './Translate.js';
|
|
@@ -58,6 +58,14 @@ const Validator = {
|
|
|
58
58
|
if (!validator.isLength(s(`.${validatorData.id}`).value, rule.options))
|
|
59
59
|
errorMessage += this.renderErrorMessage(rule);
|
|
60
60
|
break;
|
|
61
|
+
|
|
62
|
+
case 'isChileanIdentityDocument': {
|
|
63
|
+
if (!isChileanIdentityDocument(s(`.${validatorData.id}`).value)) {
|
|
64
|
+
errorMessage += this.renderErrorMessage(undefined, Translate.Render('invalid-identity-document'));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
61
69
|
default:
|
|
62
70
|
if (
|
|
63
71
|
validator[rule.type] &&
|
|
@@ -419,14 +419,6 @@ const isActiveTab = () => document.hasFocus();
|
|
|
419
419
|
const isActiveElement = (classSearch = '') =>
|
|
420
420
|
document.activeElement?.classList?.value?.match(classSearch) ? true : false;
|
|
421
421
|
|
|
422
|
-
const getCurrentTrace = () => {
|
|
423
|
-
try {
|
|
424
|
-
_stack;
|
|
425
|
-
} catch (error) {
|
|
426
|
-
return error.stack.split('is not defined')[1];
|
|
427
|
-
}
|
|
428
|
-
};
|
|
429
|
-
|
|
430
422
|
const isDevInstance = () => location.origin.match('localhost') && location.port;
|
|
431
423
|
|
|
432
424
|
const getDataFromInputFile = async (file) => Array.from(new Uint8Array(await file.arrayBuffer()));
|
|
@@ -460,7 +452,6 @@ export {
|
|
|
460
452
|
isNavigator,
|
|
461
453
|
getTimeZone,
|
|
462
454
|
getAllChildNodes,
|
|
463
|
-
getCurrentTrace,
|
|
464
455
|
isActiveTab,
|
|
465
456
|
isActiveElement,
|
|
466
457
|
isDevInstance,
|
|
@@ -22,41 +22,44 @@ const Worker = {
|
|
|
22
22
|
setTimeout(() => {
|
|
23
23
|
if ('onLine' in navigator && navigator.onLine) window.ononline();
|
|
24
24
|
});
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
if ('serviceWorker' in navigator) {
|
|
26
|
+
navigator.serviceWorker.addEventListener('controllerchange', () => {
|
|
27
|
+
logger.info('The controller of current browsing context has changed.');
|
|
28
|
+
});
|
|
29
|
+
navigator.serviceWorker.ready.then((worker) => {
|
|
30
|
+
logger.info('Ready', worker);
|
|
31
|
+
// event message
|
|
32
|
+
navigator.serviceWorker.addEventListener('message', (event) => {
|
|
33
|
+
logger.info('Received event message', event.data);
|
|
34
|
+
const { status } = event.data;
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
switch (status) {
|
|
37
|
+
case 'loader':
|
|
38
|
+
{
|
|
39
|
+
LoadingAnimation.RenderCurrentSrcLoad(event);
|
|
40
|
+
}
|
|
41
|
+
break;
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
default:
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
// if (navigator.serviceWorker.controller)
|
|
49
|
+
// navigator.serviceWorker.controller.postMessage({
|
|
50
|
+
// title: 'Hello from Client event message',
|
|
51
|
+
// });
|
|
52
|
+
|
|
53
|
+
// broadcast message
|
|
54
|
+
// const channel = new BroadcastChannel('sw-messages');
|
|
55
|
+
// channel.addEventListener('message', (event) => {
|
|
56
|
+
// logger.info('Received broadcast message', event.data);
|
|
57
|
+
// });
|
|
58
|
+
// channel.postMessage({ title: 'Hello from Client broadcast message' });
|
|
59
|
+
// channel.close();
|
|
60
|
+
});
|
|
61
|
+
}
|
|
51
62
|
|
|
52
|
-
// broadcast message
|
|
53
|
-
// const channel = new BroadcastChannel('sw-messages');
|
|
54
|
-
// channel.addEventListener('message', (event) => {
|
|
55
|
-
// logger.info('Received broadcast message', event.data);
|
|
56
|
-
// });
|
|
57
|
-
// channel.postMessage({ title: 'Hello from Client broadcast message' });
|
|
58
|
-
// channel.close();
|
|
59
|
-
});
|
|
60
63
|
this.RouterInstance = router();
|
|
61
64
|
const isInstall = await this.status();
|
|
62
65
|
if (!isInstall) await this.install();
|