underpost 2.7.8 → 2.7.9

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 (57) hide show
  1. package/.github/workflows/ghpkg.yml +41 -1
  2. package/.github/workflows/publish.yml +17 -18
  3. package/.github/workflows/pwa-microservices-template.page.yml +54 -0
  4. package/.vscode/settings.json +6 -0
  5. package/CHANGELOG.md +64 -16
  6. package/bin/cron.js +47 -0
  7. package/bin/db.js +9 -1
  8. package/bin/deploy.js +194 -9
  9. package/bin/file.js +17 -1
  10. package/bin/index.js +1 -1
  11. package/bin/util.js +22 -0
  12. package/conf.js +18 -4
  13. package/docker-compose.yml +1 -1
  14. package/package.json +3 -3
  15. package/src/api/core/core.router.js +9 -9
  16. package/src/api/core/core.service.js +6 -4
  17. package/src/api/default/default.service.js +4 -4
  18. package/src/api/file/file.service.js +3 -3
  19. package/src/api/user/user.service.js +7 -7
  20. package/src/client/components/core/CssCore.js +30 -3
  21. package/src/client/components/core/Docs.js +110 -10
  22. package/src/client/components/core/Modal.js +224 -22
  23. package/src/client/components/core/Panel.js +1 -1
  24. package/src/client/components/core/PanelForm.js +2 -1
  25. package/src/client/components/core/Responsive.js +15 -0
  26. package/src/client/components/core/RichText.js +4 -2
  27. package/src/client/components/core/WebComponent.js +44 -0
  28. package/src/client/components/core/Worker.js +10 -12
  29. package/src/client/public/default/plantuml/client-conf.svg +1 -1
  30. package/src/client/public/default/plantuml/client-schema.svg +1 -1
  31. package/src/client/public/default/plantuml/cron-conf.svg +1 -1
  32. package/src/client/public/default/plantuml/cron-schema.svg +1 -1
  33. package/src/client/public/default/plantuml/server-conf.svg +1 -1
  34. package/src/client/public/default/plantuml/server-schema.svg +1 -1
  35. package/src/client/public/default/plantuml/ssr-conf.svg +1 -1
  36. package/src/client/public/default/plantuml/ssr-schema.svg +1 -1
  37. package/src/client/public/default/site.webmanifest +69 -0
  38. package/src/client/ssr/components/body/CacheControl.js +1 -1
  39. package/src/client/ssr/components/head/Production.js +1 -0
  40. package/src/client/ssr/components/head/Pwa.js +146 -0
  41. package/src/client/ssr/components/head/Seo.js +14 -0
  42. package/src/client/ssr/pages/maintenance.js +14 -0
  43. package/src/client/ssr/pages/offline.js +21 -0
  44. package/src/client/sw/default.sw.js +4 -2
  45. package/src/db/DataBaseProvider.js +12 -1
  46. package/src/db/mongo/MongooseDB.js +0 -1
  47. package/src/server/backup.js +82 -70
  48. package/src/server/client-build.js +23 -90
  49. package/src/server/conf.js +51 -5
  50. package/src/server/crypto.js +91 -0
  51. package/src/server/dns.js +42 -13
  52. package/src/server/network.js +94 -7
  53. package/src/server/proxy.js +27 -27
  54. package/src/server/runtime.js +3 -1
  55. package/src/client/ssr/offline/default.index.js +0 -31
  56. package/src/cron.js +0 -30
  57. package/src/server/cron.js +0 -35
@@ -1 +1 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="148px" preserveAspectRatio="none" style="width:387px;height:148px;background:#FFFFFF;" version="1.1" viewBox="0 0 387 148" width="387px" zoomAndPan="magnify"><defs/><g><rect fill="#F1F1F1" height="21.6094" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="81" x="10" y="67.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="49" x="15" y="84.0332">Default</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="74" y="84.0332">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="69" x2="69" y1="67.5" y2="89.1094"/><rect fill="none" height="21.6094" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="81" x="10" y="67.5"/><rect fill="#F1F1F1" height="43.2188" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="67" x="128" y="57"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="34" x="133" y="73.5332">head</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="178" y="73.5332">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="173" x2="173" y1="57" y2="78.6094"/><line style="stroke:#000000;stroke-width:1.0;" x1="128" x2="195" y1="78.6094" y2="78.6094"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="35" x="133" y="95.1426">body</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="178" y="95.1426">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="173" x2="173" y1="78.6094" y2="100.2188"/><rect fill="none" height="43.2188" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="67" x="128" y="57"/><rect fill="#F1F1F1" height="64.8281" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="98" x="254.5" y="10"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="72" x="259.5" y="26.5332">PwaDefault</text><line style="stroke:#000000;stroke-width:1.0;" x1="254.5" x2="352.5" y1="31.6094" y2="31.6094"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="24" x="259.5" y="48.1426">Css</text><line style="stroke:#000000;stroke-width:1.0;" x1="254.5" x2="352.5" y1="53.2188" y2="53.2188"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="88" x="259.5" y="69.752">DefaultScripts</text><rect fill="none" height="64.8281" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="98" x="254.5" y="10"/><rect fill="#F1F1F1" height="43.2188" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="143" x="232" y="93"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="87" x="237" y="109.5332">CacheControl</text><line style="stroke:#000000;stroke-width:1.0;" x1="232" x2="375" y1="114.6094" y2="114.6094"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="133" x="237" y="131.1426">DefaultSplashScreen</text><rect fill="none" height="43.2188" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="143" x="232" y="93"/><path d="M183,67.5 L196,67.5 C212.9566,67.5 231.0378,64.4861 247.4183,60.5512 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M248.1643,63.5097 L249.6372,59.9916 L246.6722,57.5926 L254.8146,58.6859 L248.1643,63.5097 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="183" cy="67.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M183,89.5 L196,89.5 C205.4079,89.5 215.162,90.4278 224.7798,91.9259 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M224.253,94.9958 L227.0822,92.3209 L225.3065,88.856 L232.4545,93.2428 L224.253,94.9958 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="183" cy="89.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M79,78.5 L92,78.5 C101.2651,78.5 111.2301,78.5 120.6263,78.5 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M120.6263,81.5925 L122.9456,78.5 L120.6263,75.4075 L128.3574,78.5 L120.6263,81.5925 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="79" cy="78.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/></g></svg>
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="181px" preserveAspectRatio="none" style="width:409px;height:181px;background:#FFFFFF;" version="1.1" viewBox="0 0 409 181" width="409px" zoomAndPan="magnify"><defs/><g><rect fill="#F1F1F1" height="20.2969" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="88" x="10" y="95.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="56" x="15" y="110.4951">Default</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="81" y="110.4951">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="76" x2="76" y1="95.5" y2="115.7969"/><rect fill="none" height="20.2969" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="88" x="10" y="95.5"/><rect fill="#F1F1F1" height="40.5938" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="71" x="135" y="85"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="39" x="140" y="99.9951">head</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="189" y="99.9951">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="184" x2="184" y1="85" y2="105.2969"/><line style="stroke:#000000;stroke-width:1.0;" x1="135" x2="206" y1="105.2969" y2="105.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="39" x="140" y="120.292">body</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="189" y="120.292">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="184" x2="184" y1="105.2969" y2="125.5938"/><rect fill="none" height="40.5938" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="71" x="135" y="85"/><rect fill="#F1F1F1" height="101.4844" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="106" x="267" y="10"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="27" x="272" y="24.9951">Seo</text><line style="stroke:#000000;stroke-width:1.0;" x1="267" x2="373" y1="30.2969" y2="30.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="28" x="272" y="45.292">Pwa</text><line style="stroke:#000000;stroke-width:1.0;" x1="267" x2="373" y1="50.5938" y2="50.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="26" x="272" y="65.5889">Css</text><line style="stroke:#000000;stroke-width:1.0;" x1="267" x2="373" y1="70.8906" y2="70.8906"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="96" x="272" y="85.8857">DefaultScripts</text><line style="stroke:#000000;stroke-width:1.0;" x1="267" x2="373" y1="91.1875" y2="91.1875"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="75" x="272" y="106.1826">Production</text><rect fill="none" height="101.4844" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="106" x="267" y="10"/><rect fill="#F1F1F1" height="40.5938" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="154" x="243" y="129"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="94" x="248" y="143.9951">CacheControl</text><line style="stroke:#000000;stroke-width:1.0;" x1="243" x2="397" y1="149.2969" y2="149.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="144" x="248" y="164.292">DefaultSplashScreen</text><rect fill="none" height="40.5938" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="154" x="243" y="129"/><path d="M194,94.5 L207,94.5 C224.5169,94.5 242.9373,90.6762 259.6851,85.5933 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M260.651,88.6205 L261.9554,84.8688 L258.7191,82.5661 L267.253,83.1785 L260.651,88.6205 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="194" cy="94.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M194,115.5 L207,115.5 C216.9946,115.5 235.8154,120.4794 255.2433,126.627 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M254.319,129.4949 L257.3942,127.3202 L256.1675,123.759 L262.4131,128.9377 L254.319,129.4949 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="194" cy="115.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M86,105.5 L99,105.5 C108.2448,105.5 118.1667,105.5 127.5755,105.5 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M127.5755,108.6026 L129.9024,105.5 L127.5755,102.3974 L135.332,105.5 L127.5755,108.6026 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="86" cy="105.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/></g></svg>
@@ -1 +1 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="126px" preserveAspectRatio="none" style="width:786px;height:126px;background:#FFFFFF;" version="1.1" viewBox="0 0 786 126" width="786px" zoomAndPan="magnify"><defs/><g><rect fill="#F1F1F1" height="43.2188" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="128" x="10" y="18"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="30" x="15" y="34.5332">type</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="38" x="95" y="34.5332">object</text><line style="stroke:#000000;stroke-width:1.0;" x1="90" x2="90" y1="18" y2="39.6094"/><line style="stroke:#000000;stroke-width:1.0;" x1="10" x2="138" y1="39.6094" y2="39.6094"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="70" x="15" y="56.1426">properties</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="95" y="56.1426">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="90" x2="90" y1="39.6094" y2="61.2188"/><rect fill="none" height="43.2188" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="128" x="10" y="18"/><rect fill="#F1F1F1" height="21.6094" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="81" x="175" y="39.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="49" x="180" y="56.0332">Default</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="239" y="56.0332">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="234" x2="234" y1="39.5" y2="61.1094"/><rect fill="none" height="21.6094" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="81" x="175" y="39.5"/><rect fill="#F1F1F1" height="43.2188" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="128" x="293" y="29"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="30" x="298" y="45.5332">type</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="38" x="378" y="45.5332">object</text><line style="stroke:#000000;stroke-width:1.0;" x1="373" x2="373" y1="29" y2="50.6094"/><line style="stroke:#000000;stroke-width:1.0;" x1="293" x2="421" y1="50.6094" y2="50.6094"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="70" x="298" y="67.1426">properties</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="378" y="67.1426">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="373" x2="373" y1="50.6094" y2="72.2188"/><rect fill="none" height="43.2188" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="128" x="293" y="29"/><rect fill="#F1F1F1" height="43.2188" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="67" x="458" y="40"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="34" x="463" y="56.5332">head</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="508" y="56.5332">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="503" x2="503" y1="40" y2="61.6094"/><line style="stroke:#000000;stroke-width:1.0;" x1="458" x2="525" y1="61.6094" y2="61.6094"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="35" x="463" y="78.1426">body</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="508" y="78.1426">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="503" x2="503" y1="61.6094" y2="83.2188"/><rect fill="none" height="43.2188" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="67" x="458" y="40"/><rect fill="#F1F1F1" height="43.2188" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="90" x="562" y="10"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="30" x="567" y="26.5332">type</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="33" x="614" y="26.5332">array</text><line style="stroke:#000000;stroke-width:1.0;" x1="609" x2="609" y1="10" y2="31.6094"/><line style="stroke:#000000;stroke-width:1.0;" x1="562" x2="652" y1="31.6094" y2="31.6094"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="37" x="567" y="48.1426">items</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="614" y="48.1426">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="609" x2="609" y1="31.6094" y2="53.2188"/><rect fill="none" height="43.2188" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="90" x="562" y="10"/><rect fill="#F1F1F1" height="21.6094" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="85" x="689" y="31.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="30" x="694" y="48.0332">type</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="35" x="734" y="48.0332">string</text><line style="stroke:#000000;stroke-width:1.0;" x1="729" x2="729" y1="31.5" y2="53.1094"/><rect fill="none" height="21.6094" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="85" x="689" y="31.5"/><rect fill="#F1F1F1" height="43.2188" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="90" x="562" y="71"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="30" x="567" y="87.5332">type</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="33" x="614" y="87.5332">array</text><line style="stroke:#000000;stroke-width:1.0;" x1="609" x2="609" y1="71" y2="92.6094"/><line style="stroke:#000000;stroke-width:1.0;" x1="562" x2="652" y1="92.6094" y2="92.6094"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="37" x="567" y="109.1426">items</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="614" y="109.1426">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="609" x2="609" y1="92.6094" y2="114.2188"/><rect fill="none" height="43.2188" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="90" x="562" y="71"/><rect fill="#F1F1F1" height="21.6094" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="85" x="689" y="92.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="30" x="694" y="109.0332">type</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="35" x="734" y="109.0332">string</text><line style="stroke:#000000;stroke-width:1.0;" x1="729" x2="729" y1="92.5" y2="114.1094"/><rect fill="none" height="21.6094" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="85" x="689" y="92.5"/><path d="M640,42.5 L653,42.5 C662.2961,42.5 672.2155,42.5 681.7553,42.5 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M681.7553,45.5201 L684.0204,42.5 L681.7553,39.4799 L689.3056,42.5 L681.7553,45.5201 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="640" cy="42.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M513,50.5 L526,50.5 C535.4045,50.5 545.2657,49.2565 554.7344,47.4057 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M555.3753,50.403 L556.9824,46.925 L554.0935,44.4083 L562.2278,45.8034 L555.3753,50.403 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="513" cy="50.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M640,103.5 L653,103.5 C662.2961,103.5 672.2155,103.5 681.7553,103.5 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M681.7553,106.5201 L684.0204,103.5 L681.7553,100.4799 L689.3056,103.5 L681.7553,106.5201 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="640" cy="103.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M513,72.5 L526,72.5 C535.4312,72.5 545.3055,73.809 554.7789,75.7572 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M554.1042,78.7553 L557.0275,76.2632 L555.4535,72.759 L562.2743,77.4438 L554.1042,78.7553 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="513" cy="72.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M409,61.5 L422,61.5 C431.2651,61.5 441.2301,61.5 450.6263,61.5 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M450.6263,64.5925 L452.9456,61.5 L450.6263,58.4075 L458.3574,61.5 L450.6263,64.5925 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="409" cy="61.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M244,50.5 L257,50.5 C266.2687,50.5 276.0232,50.5 285.6525,50.5 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M285.6525,53.5736 L287.9577,50.5 L285.6525,47.4264 L293.3365,50.5 L285.6525,53.5736 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="244" cy="50.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M126,50.5 L139,50.5 C148.266,50.5 158.1675,50.5 167.6585,50.5 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M167.6585,53.5014 L169.9096,50.5 L167.6585,47.4986 L175.1621,50.5 L167.6585,53.5014 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="126" cy="50.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/></g></svg>
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="121px" preserveAspectRatio="none" style="width:848px;height:121px;background:#FFFFFF;" version="1.1" viewBox="0 0 848 121" width="848px" zoomAndPan="magnify"><defs/><g><rect fill="#F1F1F1" height="40.5938" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="146" x="10" y="20"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="35" x="15" y="34.9951">type</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="43" x="108" y="34.9951">object</text><line style="stroke:#000000;stroke-width:1.0;" x1="103" x2="103" y1="20" y2="40.2969"/><line style="stroke:#000000;stroke-width:1.0;" x1="10" x2="156" y1="40.2969" y2="40.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="83" x="15" y="55.292">properties</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="108" y="55.292">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="103" x2="103" y1="40.2969" y2="60.5938"/><rect fill="none" height="40.5938" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="146" x="10" y="20"/><rect fill="#F1F1F1" height="20.2969" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="88" x="193" y="40.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="56" x="198" y="55.4951">Default</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="264" y="55.4951">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="259" x2="259" y1="40.5" y2="60.7969"/><rect fill="none" height="20.2969" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="88" x="193" y="40.5"/><rect fill="#F1F1F1" height="40.5938" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="146" x="318" y="30"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="35" x="323" y="44.9951">type</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="43" x="416" y="44.9951">object</text><line style="stroke:#000000;stroke-width:1.0;" x1="411" x2="411" y1="30" y2="50.2969"/><line style="stroke:#000000;stroke-width:1.0;" x1="318" x2="464" y1="50.2969" y2="50.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="83" x="323" y="65.292">properties</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="416" y="65.292">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="411" x2="411" y1="50.2969" y2="70.5938"/><rect fill="none" height="40.5938" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="146" x="318" y="30"/><rect fill="#F1F1F1" height="40.5938" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="71" x="501" y="40"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="39" x="506" y="54.9951">head</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="555" y="54.9951">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="550" x2="550" y1="40" y2="60.2969"/><line style="stroke:#000000;stroke-width:1.0;" x1="501" x2="572" y1="60.2969" y2="60.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="39" x="506" y="75.292">body</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="555" y="75.292">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="550" x2="550" y1="60.2969" y2="80.5938"/><rect fill="none" height="40.5938" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="71" x="501" y="40"/><rect fill="#F1F1F1" height="40.5938" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="96" x="609" y="10"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="35" x="614" y="24.9951">type</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="33" x="667" y="24.9951">array</text><line style="stroke:#000000;stroke-width:1.0;" x1="662" x2="662" y1="10" y2="30.2969"/><line style="stroke:#000000;stroke-width:1.0;" x1="609" x2="705" y1="30.2969" y2="30.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="43" x="614" y="45.292">items</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="667" y="45.292">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="662" x2="662" y1="30.2969" y2="50.5938"/><rect fill="none" height="40.5938" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="96" x="609" y="10"/><rect fill="#F1F1F1" height="20.2969" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="94" x="742" y="30.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="35" x="747" y="45.4951">type</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="39" x="792" y="45.4951">string</text><line style="stroke:#000000;stroke-width:1.0;" x1="787" x2="787" y1="30.5" y2="50.7969"/><rect fill="none" height="20.2969" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="94" x="742" y="30.5"/><rect fill="#F1F1F1" height="40.5938" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="96" x="609" y="69"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="35" x="614" y="83.9951">type</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="33" x="667" y="83.9951">array</text><line style="stroke:#000000;stroke-width:1.0;" x1="662" x2="662" y1="69" y2="89.2969"/><line style="stroke:#000000;stroke-width:1.0;" x1="609" x2="705" y1="89.2969" y2="89.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="43" x="614" y="104.292">items</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="667" y="104.292">   </text><line style="stroke:#000000;stroke-width:1.0;" x1="662" x2="662" y1="89.2969" y2="109.5938"/><rect fill="none" height="40.5938" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="96" x="609" y="69"/><rect fill="#F1F1F1" height="20.2969" rx="5" ry="5" style="stroke:#F1F1F1;stroke-width:1.5;" width="94" x="742" y="89.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="35" x="747" y="104.4951">type</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="39" x="792" y="104.4951">string</text><line style="stroke:#000000;stroke-width:1.0;" x1="787" x2="787" y1="89.5" y2="109.7969"/><rect fill="none" height="20.2969" rx="5" ry="5" style="stroke:#000000;stroke-width:1.5;" width="94" x="742" y="89.5"/><path d="M693,40.5 L706,40.5 C715.2674,40.5 725.1203,40.5 734.6708,40.5 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M734.6708,43.531 L736.9441,40.5 L734.6708,37.469 L742.2484,40.5 L734.6708,43.531 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="693" cy="40.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M560,49.5 L573,49.5 C582.3848,49.5 592.2184,48.3447 601.7089,46.604 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M602.3132,49.6129 L603.9656,46.1508 L601.1046,43.595 L609.2313,45.0933 L602.3132,49.6129 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="560" cy="49.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M693,99.5 L706,99.5 C715.2674,99.5 725.1203,99.5 734.6708,99.5 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M734.6708,102.531 L736.9441,99.5 L734.6708,96.469 L742.2484,99.5 L734.6708,102.531 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="693" cy="99.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M560,70.5 L573,70.5 C582.3848,70.5 592.2184,71.6553 601.7089,73.396 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M601.1046,76.405 L603.9656,73.8492 L602.3132,70.3871 L609.2313,74.9067 L601.1046,76.405 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="560" cy="70.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M452,60.5 L465,60.5 C474.2448,60.5 484.1667,60.5 493.5755,60.5 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M493.5755,63.6026 L495.9024,60.5 L493.5755,57.3974 L501.332,60.5 L493.5755,63.6026 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="452" cy="60.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M269,50.5 L282,50.5 C291.2896,50.5 301.0267,50.5 310.694,50.5 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M310.694,53.5913 L313.0124,50.5 L310.694,47.4087 L318.4221,50.5 L310.694,53.5913 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="269" cy="50.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><path d="M144,50.5 L157,50.5 C166.2571,50.5 176.1205,50.5 185.6372,50.5 " fill="none" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:3.0,3.0;"/><path d="M185.6372,53.5158 L187.899,50.5 L185.6372,47.4842 L193.1767,50.5 L185.6372,53.5158 " fill="#000000" style="stroke:#000000;stroke-width:1.0;"/><ellipse cx="144" cy="50.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/></g></svg>
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "Default",
3
+ "short_name": "Default",
4
+ "description": null,
5
+ "dir": "auto",
6
+ "lang": "en-US",
7
+ "display": "standalone",
8
+ "orientation": "any",
9
+ "scope": "/",
10
+ "start_url": "/?homescreen=1",
11
+ "background_color": "#fff",
12
+ "theme_color": "#fff",
13
+ "icons": [
14
+ {
15
+ "src": "/android-chrome-36x36.png",
16
+ "sizes": "36x36",
17
+ "type": "image/png",
18
+ "purpose": "any maskable"
19
+ },
20
+ {
21
+ "src": "/android-chrome-48x48.png",
22
+ "sizes": "48x48",
23
+ "type": "image/png",
24
+ "purpose": "any maskable"
25
+ },
26
+ {
27
+ "src": "/android-chrome-72x72.png",
28
+ "sizes": "72x72",
29
+ "type": "image/png",
30
+ "purpose": "any maskable"
31
+ },
32
+ {
33
+ "src": "/android-chrome-96x96.png",
34
+ "sizes": "96x96",
35
+ "type": "image/png",
36
+ "purpose": "any maskable"
37
+ },
38
+ {
39
+ "src": "/android-chrome-144x144.png",
40
+ "sizes": "144x144",
41
+ "type": "image/png",
42
+ "purpose": "any maskable"
43
+ },
44
+ {
45
+ "src": "/android-chrome-192x192.png",
46
+ "sizes": "192x192",
47
+ "type": "image/png",
48
+ "purpose": "any maskable"
49
+ },
50
+ {
51
+ "src": "/android-chrome-256x256.png",
52
+ "sizes": "256x256",
53
+ "type": "image/png",
54
+ "purpose": "any maskable"
55
+ },
56
+ {
57
+ "src": "/android-chrome-384x384.png",
58
+ "sizes": "384x384",
59
+ "type": "image/png",
60
+ "purpose": "any maskable"
61
+ },
62
+ {
63
+ "src": "/android-chrome-512x512.png",
64
+ "sizes": "512x512",
65
+ "type": "image/png",
66
+ "purpose": "any maskable"
67
+ }
68
+ ]
69
+ }
@@ -109,6 +109,6 @@ SrrComponent = ({ ttiLoadTimeLimit }) => {
109
109
  const CacheControl = ${CacheControl};
110
110
  CacheControl({ ttiLoadTimeLimit: ${ttiLoadTimeLimit ? ttiLoadTimeLimit : 1000 * 70 * 1} });
111
111
  </script>
112
- <div class="clean-cache-container">v2.7.8</div>
112
+ <div class="clean-cache-container">v2.7.9</div>
113
113
  `;
114
114
  };
@@ -0,0 +1 @@
1
+ SrrComponent = () => html``;
@@ -0,0 +1,146 @@
1
+ SrrComponent = ({
2
+ title,
3
+ author,
4
+ keywords,
5
+ description,
6
+ themeColor,
7
+ canonicalURL,
8
+ ssrPath,
9
+ thumbnail,
10
+ pwaAssetsPath,
11
+ }) => html`
12
+ <link rel="manifest" href="${ssrPath}site.webmanifest" />
13
+ <link
14
+ rel="icon"
15
+ type="image/png"
16
+ sizes="16x16"
17
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}favicon-16x16.png"
18
+ />
19
+ <link
20
+ rel="icon"
21
+ type="image/png"
22
+ sizes="32x32"
23
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}favicon-32x32.png"
24
+ />
25
+ <!-- <link rel="icon" type="image/png" sizes="194x194" href="${ssrPath}${pwaAssetsPath !== undefined
26
+ ? pwaAssetsPath
27
+ : 'assets/splash/'}favicon-194x194.png" /> -->
28
+ <!-- chrome -->
29
+ <link
30
+ rel="icon"
31
+ type="image/png"
32
+ sizes="36x36"
33
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-36x36.png"
34
+ />
35
+ <link
36
+ rel="icon"
37
+ type="image/png"
38
+ sizes="48x48"
39
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-48x48.png"
40
+ />
41
+ <link
42
+ rel="icon"
43
+ type="image/png"
44
+ sizes="72x72"
45
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-72x72.png"
46
+ />
47
+ <link
48
+ rel="icon"
49
+ type="image/png"
50
+ sizes="96x96"
51
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-96x96.png"
52
+ />
53
+ <link
54
+ rel="icon"
55
+ type="image/png"
56
+ sizes="144x144"
57
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-144x144.png"
58
+ />
59
+ <link
60
+ rel="icon"
61
+ type="image/png"
62
+ sizes="256x256"
63
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-256x256.png"
64
+ />
65
+ <link
66
+ rel="icon"
67
+ type="image/png"
68
+ sizes="384x384"
69
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-384x384.png"
70
+ />
71
+ <link
72
+ rel="icon"
73
+ type="image/png"
74
+ sizes="512x512"
75
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-512x512.png"
76
+ />
77
+ <!-- apple -->
78
+ <link
79
+ rel="apple-touch-icon"
80
+ sizes="180x180"
81
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}apple-touch-icon.png"
82
+ />
83
+ <link
84
+ rel="mask-icon"
85
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}safari-pinned-tab.svg"
86
+ color="${themeColor}"
87
+ />
88
+ <meta name="apple-mobile-web-app-title" content="${title}" />
89
+ <link
90
+ rel="apple-touch-icon"
91
+ type="image/png"
92
+ sizes="36x36"
93
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-36x36.png"
94
+ />
95
+ <link
96
+ rel="apple-touch-icon"
97
+ type="image/png"
98
+ sizes="48x48"
99
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-48x48.png"
100
+ />
101
+ <link
102
+ rel="apple-touch-icon"
103
+ type="image/png"
104
+ sizes="72x72"
105
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-72x72.png"
106
+ />
107
+ <link
108
+ rel="apple-touch-icon"
109
+ type="image/png"
110
+ sizes="96x96"
111
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-96x96.png"
112
+ />
113
+ <link
114
+ rel="apple-touch-icon"
115
+ type="image/png"
116
+ sizes="144x144"
117
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-144x144.png"
118
+ />
119
+ <link
120
+ rel="apple-touch-icon"
121
+ type="image/png"
122
+ sizes="256x256"
123
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-256x256.png"
124
+ />
125
+ <link
126
+ rel="apple-touch-icon"
127
+ type="image/png"
128
+ sizes="384x384"
129
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-384x384.png"
130
+ />
131
+ <link
132
+ rel="apple-touch-icon"
133
+ type="image/png"
134
+ sizes="512x512"
135
+ href="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}android-chrome-512x512.png"
136
+ />
137
+ <!-- microsoft -->
138
+ <meta name="msapplication-config" content="${ssrPath}browserconfig.xml" />
139
+ <meta name="application-name" content="${title}" />
140
+ <meta name="msapplication-TileColor" content="${themeColor}" />
141
+ <meta
142
+ name="msapplication-TileImage"
143
+ content="${ssrPath}${pwaAssetsPath !== undefined ? pwaAssetsPath : 'assets/splash/'}mstile-144x144.png"
144
+ />
145
+ <meta name="theme-color" content="${themeColor}" />
146
+ `;
@@ -0,0 +1,14 @@
1
+ SrrComponent = ({ title, author, keywords, description, themeColor, ssrPath, canonicalURL, thumbnail }) => html`
2
+ <link rel="canonical" href="${canonicalURL}" />
3
+
4
+ <meta name="author" content="${author}" />
5
+ <meta name="keywords" content="${keywords.join(',')}" />
6
+ <meta name="description" content="${description}" />
7
+ <meta name="theme-color" content="${themeColor}" />
8
+
9
+ <meta property="og:title" content="${title}" />
10
+ <meta property="og:description" content="${description}" />
11
+ <meta property="og:image" content="${thumbnail}" />
12
+ <meta property="og:url" content="${canonicalURL}" />
13
+ <meta name="twitter:card" content="summary_large_image" />
14
+ `;
@@ -0,0 +1,14 @@
1
+ import { htmls, loggerFactory } from '../common/SsrCore.js';
2
+ import { Alert } from '../common/Alert.js';
3
+ import { Translate } from '../common/Translate.js';
4
+ import { Worker } from '../common/Worker.js';
5
+ /*imports*/
6
+
7
+ const logger = loggerFactory({ url: location.toString() });
8
+
9
+ window.onload = () =>
10
+ Worker.instance({
11
+ render: async () => {
12
+ htmls(`.page-render`, html`${await Alert.maintenance({ Translate })}`);
13
+ },
14
+ });
@@ -0,0 +1,21 @@
1
+ import { htmls, loggerFactory } from '../common/SsrCore.js';
2
+ import { Alert } from '../common/Alert.js';
3
+ import { Translate } from '../common/Translate.js';
4
+ import { Worker } from '../common/Worker.js';
5
+ /*imports*/
6
+
7
+ const logger = loggerFactory({ url: location.toString() });
8
+
9
+ window.onload = () =>
10
+ Worker.instance({
11
+ render: async () => {
12
+ window.ononline = async () => {
13
+ location.href = location.pathname.split('/')[1] ? `/${location.pathname.split('/')[1].split('.')[0]}` : '/';
14
+ };
15
+ window.onoffline = async () => {
16
+ htmls(`.page-render`, html`${await Alert.noInternet({ Translate })}`);
17
+ };
18
+ if (navigator.onLine && !location.hostname.match('localhost')) window.ononline();
19
+ else window.onoffline();
20
+ },
21
+ });
@@ -37,6 +37,8 @@ even while offline, can asynchronously save files and many other things)
37
37
 
38
38
  const logger = loggerFactory(import.meta);
39
39
 
40
+ const PROXY_PATH = '/';
41
+
40
42
  self.addEventListener('install', (event) => {
41
43
  // Activate right away
42
44
  self.skipWaiting();
@@ -180,8 +182,8 @@ self.addEventListener('fetch', (event) => {
180
182
 
181
183
  logger.error('Fetch failed; returning offline page instead.', { error, path });
182
184
  try {
183
- const cache = await caches.open('/offline.html');
184
- const cachedResponse = await cache.match('/offline.html');
185
+ const cache = await caches.open(`${PROXY_PATH}offline.html`);
186
+ const cachedResponse = await cache.match(`${PROXY_PATH}offline.html`);
185
187
  return cachedResponse;
186
188
  } catch (error) {
187
189
  logger.error('Error opening cache for offline page', { error, path });
@@ -18,7 +18,18 @@ const DataBaseProvider = {
18
18
  case 'mongoose':
19
19
  {
20
20
  const conn = await MongooseDB.connect(db.host, db.name);
21
- this.instance[`${host}${path}`][db.provider] = await MongooseDB.loadModels({ conn, apis });
21
+ this.instance[`${host}${path}`][db.provider] = {
22
+ models: await MongooseDB.loadModels({ conn, apis }),
23
+ connection: conn,
24
+ close: async () => {
25
+ return await new Promise((resolve) => {
26
+ DataBaseProvider.instance[`${host}${path}`][db.provider].connection.close().then(() => {
27
+ // logger.info('Mongoose connection is disconnected', db);
28
+ return resolve();
29
+ });
30
+ });
31
+ },
32
+ };
22
33
  }
23
34
  break;
24
35
  default:
@@ -1,5 +1,4 @@
1
1
  import mongoose from 'mongoose';
2
- import cron from 'node-cron';
3
2
  import { loggerFactory } from '../../server/logger.js';
4
3
  import { getCapVariableName } from '../../client/components/core/CommonJs.js';
5
4
  import { shellCd, shellExec } from '../../server/process.js';
@@ -9,100 +9,112 @@ dotenv.config();
9
9
  const logger = loggerFactory(import.meta);
10
10
 
11
11
  const BackUpManagement = {
12
- repoUrl: `https://${process.env.GITHUB_BACKUP_TOKEN}@github.com/${process.env.GITHUB_BACKUP_USERNAME}/${process.env.GITHUB_BACKUP_REPO}.git`,
13
- Init: async function () {
14
- await this.Callback();
15
- return this.Callback;
16
- },
17
- Callback: async function () {
18
- const privateCronConfPath = `./engine-private/conf/${process.argv[2]}/conf.cron.json`;
12
+ repoUrl: `https://${process.env.GITHUB_TOKEN}@github.com/${process.env.GITHUB_USERNAME}/${process.env.GITHUB_BACKUP_REPO}.git`,
13
+ Init: async function ({ deployId }) {
14
+ const Callback = async function () {
15
+ const privateCronConfPath = `./engine-private/conf/${deployId}/conf.cron.json`;
19
16
 
20
- const confCronPath = fs.existsSync(privateCronConfPath) ? privateCronConfPath : './conf/conf.cron.json';
17
+ const confCronPath = fs.existsSync(privateCronConfPath) ? privateCronConfPath : './conf/conf.cron.json';
21
18
 
22
- const { backups } = JSON.parse(fs.readFileSync(confCronPath, 'utf8'));
19
+ const { backups } = JSON.parse(fs.readFileSync(confCronPath, 'utf8'));
23
20
 
24
- if (!backups) return;
21
+ if (!backups) return;
25
22
 
26
- const currentDate = new Date().getTime();
23
+ logger.info('init backups callback');
24
+ await logger.setUpInfo();
27
25
 
28
- if (!fs.existsSync('./engine-private/cron-backups'))
29
- fs.mkdirSync('./engine-private/cron-backups', { recursive: true });
26
+ const currentDate = new Date().getTime();
30
27
 
31
- for (const deployGroupData of backups) {
32
- const { deployGroupId } = deployGroupData;
33
- const dataDeploy = getDataDeploy({ deployGroupId });
28
+ if (!fs.existsSync('./engine-private/cron-backups'))
29
+ fs.mkdirSync('./engine-private/cron-backups', { recursive: true });
34
30
 
35
- for (const deployObj of dataDeploy) {
36
- const { deployId, replicaHost } = deployObj;
31
+ for (const deployGroupData of backups) {
32
+ const { deployGroupId } = deployGroupData;
33
+ const dataDeploy = getDataDeploy({ deployGroupId });
37
34
 
38
- if (replicaHost) continue;
35
+ for (const deployObj of dataDeploy) {
36
+ const { deployId, replicaHost } = deployObj;
39
37
 
40
- const confServer = JSON.parse(
41
- fs.existsSync(`./engine-private/replica/${deployId}/conf.server.json`)
42
- ? fs.readFileSync(`./engine-private/replica/${deployId}/conf.server.json`, 'utf8')
43
- : fs.readFileSync(`./engine-private/conf/${deployId}/conf.server.json`, 'utf8'),
44
- );
38
+ if (replicaHost) continue;
45
39
 
46
- for (const host of Object.keys(confServer))
47
- for (const path of Object.keys(confServer[host])) {
48
- // retention policy
49
- let { db, backupFrequency, maxBackupRetention, singleReplica, wp, git, directory } = confServer[host][path];
40
+ const confServer = JSON.parse(
41
+ fs.existsSync(`./engine-private/replica/${deployId}/conf.server.json`)
42
+ ? fs.readFileSync(`./engine-private/replica/${deployId}/conf.server.json`, 'utf8')
43
+ : fs.readFileSync(`./engine-private/conf/${deployId}/conf.server.json`, 'utf8'),
44
+ );
50
45
 
51
- if (!db || singleReplica) continue;
46
+ for (const host of Object.keys(confServer))
47
+ for (const path of Object.keys(confServer[host])) {
48
+ // retention policy
49
+ let { db, backupFrequency, maxBackupRetention, singleReplica, wp, git, directory } =
50
+ confServer[host][path];
52
51
 
53
- if (!backupFrequency) backupFrequency = 'daily';
54
- if (!maxBackupRetention) maxBackupRetention = 5;
52
+ if (!db || singleReplica) continue;
55
53
 
56
- const backUpPath = `${process.cwd()}/engine-private/cron-backups/${getCronBackUpFolder(host, path)}`;
57
- if (!fs.existsSync(backUpPath)) fs.mkdirSync(`${backUpPath}`, { recursive: true });
58
- // .isDirectory()
59
- const files = await fs.readdir(backUpPath, { withFileTypes: true });
54
+ if (!backupFrequency) backupFrequency = 'daily';
55
+ if (!maxBackupRetention) maxBackupRetention = 5;
60
56
 
61
- const currentBackupsDirs = files
62
- .map((fileObj) => parseInt(fileObj.name))
63
- .sort((a, b) => a - b)
64
- .reverse();
57
+ const backUpPath = `${process.cwd()}/engine-private/cron-backups/${getCronBackUpFolder(host, path)}`;
58
+ if (!fs.existsSync(backUpPath)) fs.mkdirSync(`${backUpPath}`, { recursive: true });
59
+ // .isDirectory()
60
+ const files = await fs.readdir(backUpPath, { withFileTypes: true });
65
61
 
66
- switch (backupFrequency) {
67
- case 'daily':
62
+ const currentBackupsDirs = files
63
+ .map((fileObj) => parseInt(fileObj.name))
64
+ .sort((a, b) => a - b)
65
+ .reverse();
68
66
 
69
- default:
70
- // if (currentBackupsDirs[0] && currentDate - currentBackupsDirs[0] < 1000 * 60 * 60 * 24) continue;
71
- break;
72
- }
67
+ switch (backupFrequency) {
68
+ case 'daily':
73
69
 
74
- for (const retentionPath of currentBackupsDirs.filter((t, i) => i >= maxBackupRetention - 1)) {
75
- const removePathRetention = `${backUpPath}/${retentionPath}`;
76
- logger.info('Remove backup folder', removePathRetention);
77
- fs.removeSync(removePathRetention);
78
- }
70
+ default:
71
+ // if (currentBackupsDirs[0] && currentDate - currentBackupsDirs[0] < 1000 * 60 * 60 * 24) continue;
72
+ break;
73
+ }
74
+
75
+ for (const retentionPath of currentBackupsDirs.filter((t, i) => i >= maxBackupRetention - 1)) {
76
+ const removePathRetention = `${backUpPath}/${retentionPath}`;
77
+ logger.info('Remove backup folder', removePathRetention);
78
+ fs.removeSync(removePathRetention);
79
+ }
79
80
 
80
- fs.mkdirSync(`${backUpPath}/${currentDate}`, { recursive: true });
81
+ fs.mkdirSync(`${backUpPath}/${currentDate}`, { recursive: true });
81
82
 
82
- shellExec(`node bin/db ${host}${path} export ${deployId} ${backUpPath}/${currentDate}`);
83
+ shellExec(`node bin/db ${host}${path} export ${deployId} ${backUpPath}/${currentDate}`);
83
84
 
84
- if (wp) {
85
- const repoUrl = `https://${process.env.GITHUB_BACKUP_TOKEN}@github.com/${
86
- process.env.GITHUB_BACKUP_USERNAME
87
- }/${git.split('/').pop()}.git`;
85
+ if (wp) {
86
+ const repoUrl = `https://${process.env.GITHUB_TOKEN}@github.com/${process.env.GITHUB_USERNAME}/${git
87
+ .split('/')
88
+ .pop()}.git`;
88
89
 
89
- shellExec(
90
- `cd ${directory}` +
91
- ` && git pull ${repoUrl}` +
92
- ` && git add . && git commit -m "backup ${new Date().toLocaleDateString()}"` +
93
- ` && git push ${repoUrl}`,
94
- );
90
+ shellExec(
91
+ `cd ${directory}` +
92
+ ` && git pull ${repoUrl}` +
93
+ ` && git add . && git commit -m "backup ${new Date().toLocaleDateString()}"` +
94
+ ` && git push ${repoUrl}`,
95
+ {
96
+ disableLog: true,
97
+ },
98
+ );
99
+ }
95
100
  }
96
- }
101
+ }
97
102
  }
98
- }
99
- shellExec(
100
- `cd ./engine-private/cron-backups` +
101
- ` && git pull ${BackUpManagement.repoUrl}` +
102
- ` && git add . && git commit -m "backup ${new Date().toLocaleDateString()}"` +
103
- ` && git push ${BackUpManagement.repoUrl}`,
104
- );
103
+ shellExec(
104
+ `cd ./engine-private/cron-backups` +
105
+ ` && git pull ${BackUpManagement.repoUrl}` +
106
+ ` && git add . && git commit -m "backup ${new Date().toLocaleDateString()}"` +
107
+ ` && git push ${BackUpManagement.repoUrl}`,
108
+ {
109
+ disableLog: true,
110
+ },
111
+ );
112
+ };
113
+ await Callback();
114
+ BackUpManagement.Callback = Callback;
115
+ return Callback;
105
116
  },
117
+ Callback: async function (params) {},
106
118
  };
107
119
 
108
120
  export { BackUpManagement };