@silexlabs/silex 3.0.1-0 → 3.0.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 (250) hide show
  1. package/.env.default +3 -2
  2. package/.silex.js +39 -1
  3. package/README.md +37 -35
  4. package/dist/client/client/api.d.ts +8 -1
  5. package/dist/client/client/assetUrl.d.ts +54 -0
  6. package/dist/client/client/config.d.ts +60 -1
  7. package/dist/client/client/events.d.ts +19 -10
  8. package/dist/client/client/grapesjs/PublicationManager.d.ts +6 -8
  9. package/dist/client/client/grapesjs/PublicationUi.d.ts +8 -10
  10. package/dist/client/client/grapesjs/breadcrumbs.d.ts +1 -0
  11. package/dist/client/client/grapesjs/css-props.d.ts +6 -0
  12. package/dist/client/client/grapesjs/footer.d.ts +2 -0
  13. package/dist/client/client/grapesjs/img.d.ts +6 -0
  14. package/dist/client/client/grapesjs/index.d.ts +6 -2
  15. package/dist/client/client/grapesjs/internal-links.d.ts +1 -1
  16. package/dist/client/client/grapesjs/keymaps.d.ts +123 -0
  17. package/dist/client/client/grapesjs/new-page-dialog.d.ts +1 -1
  18. package/dist/client/client/grapesjs/page-panel.d.ts +7 -1
  19. package/dist/client/client/grapesjs/project-bar.d.ts +20 -0
  20. package/dist/client/client/grapesjs/resize-panel.d.ts +1 -0
  21. package/dist/client/client/grapesjs/rich-text.d.ts +4 -1
  22. package/dist/client/client/grapesjs/semantic.d.ts +1 -1
  23. package/dist/client/client/grapesjs/settings-sections.d.ts +16 -0
  24. package/dist/client/client/grapesjs/settings.d.ts +3 -1
  25. package/dist/client/client/grapesjs/storage.d.ts +1 -0
  26. package/dist/client/client/grapesjs/symbolDialogs.d.ts +1 -1
  27. package/dist/client/client/grapesjs/view-buttons.d.ts +1 -0
  28. package/dist/client/client/index.d.ts +5 -0
  29. package/dist/client/client/publication-transformers.d.ts +42 -0
  30. package/dist/client/client/publish-custom-code-block.d.ts +4 -0
  31. package/dist/client/client/publish-fonts.d.ts +4 -0
  32. package/dist/client/client/utils.d.ts +22 -1
  33. package/dist/client/constants.d.ts +3 -0
  34. package/dist/client/css/admin.css +1107 -411
  35. package/dist/client/css/admin.css.map +1 -0
  36. package/dist/client/grapesjs-filter-styles/dist/index.d.ts +4 -0
  37. package/dist/client/grapesjs-fonts/dist/index.d.ts +4 -0
  38. package/dist/client/grapesjs-fonts/src/commands.d.ts +3 -0
  39. package/dist/client/grapesjs-fonts/src/fonts.d.ts +4 -0
  40. package/dist/client/grapesjs-storage-rate-limit/dist/index.d.ts +4 -0
  41. package/dist/client/grapesjs-ui-suggest-classes/dist/index.d.ts +4 -0
  42. package/dist/client/index.html +3 -2
  43. package/dist/client/js/main.js +305 -170
  44. package/dist/client/js/main.js.LICENSE.txt +21 -1
  45. package/dist/client/page.d.ts +1 -1
  46. package/dist/client/silex-lib/src/ts/client/api.d.ts +90 -0
  47. package/dist/client/silex-lib/src/ts/client/assetUrl.d.ts +54 -0
  48. package/dist/client/silex-lib/src/ts/client/config.d.ts +102 -0
  49. package/dist/client/silex-lib/src/ts/client/events.d.ts +23 -0
  50. package/dist/client/silex-lib/src/ts/client/expose.d.ts +8 -0
  51. package/dist/client/silex-lib/src/ts/client/grapesjs/LoginDialog.d.ts +15 -0
  52. package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationManager.d.ts +73 -0
  53. package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationUi.d.ts +59 -0
  54. package/dist/client/silex-lib/src/ts/client/grapesjs/blocks.d.ts +1 -0
  55. package/dist/client/silex-lib/src/ts/client/grapesjs/breadcrumbs.d.ts +1 -0
  56. package/dist/client/silex-lib/src/ts/client/grapesjs/css-props.d.ts +6 -0
  57. package/dist/client/silex-lib/src/ts/client/grapesjs/footer.d.ts +2 -0
  58. package/dist/client/silex-lib/src/ts/client/grapesjs/img.d.ts +6 -0
  59. package/dist/client/silex-lib/src/ts/client/grapesjs/index.d.ts +9 -0
  60. package/dist/client/silex-lib/src/ts/client/grapesjs/internal-links.d.ts +1 -0
  61. package/dist/client/silex-lib/src/ts/client/grapesjs/keymaps.d.ts +123 -0
  62. package/dist/client/silex-lib/src/ts/client/grapesjs/new-page-dialog.d.ts +2 -0
  63. package/dist/client/silex-lib/src/ts/client/grapesjs/openImport.d.ts +9 -0
  64. package/dist/client/silex-lib/src/ts/client/grapesjs/page-panel.d.ts +9 -0
  65. package/dist/client/silex-lib/src/ts/client/grapesjs/project-bar.d.ts +21 -0
  66. package/dist/client/silex-lib/src/ts/client/grapesjs/resize-panel.d.ts +1 -0
  67. package/dist/client/silex-lib/src/ts/client/grapesjs/rich-text.d.ts +4 -0
  68. package/dist/client/silex-lib/src/ts/client/grapesjs/semantic.d.ts +1 -0
  69. package/dist/client/silex-lib/src/ts/client/grapesjs/settings-sections.d.ts +16 -0
  70. package/dist/client/silex-lib/src/ts/client/grapesjs/settings.d.ts +4 -0
  71. package/dist/client/silex-lib/src/ts/client/grapesjs/storage.d.ts +2 -0
  72. package/dist/client/silex-lib/src/ts/client/grapesjs/symbolDialogs.d.ts +3 -0
  73. package/dist/client/silex-lib/src/ts/client/grapesjs/view-buttons.d.ts +1 -0
  74. package/dist/client/silex-lib/src/ts/client/index.d.ts +10 -0
  75. package/dist/client/silex-lib/src/ts/client/publication-transformers.d.ts +42 -0
  76. package/dist/client/silex-lib/src/ts/client/publish-custom-code-block.d.ts +4 -0
  77. package/dist/client/silex-lib/src/ts/client/publish-fonts.d.ts +4 -0
  78. package/dist/client/silex-lib/src/ts/client/utils.d.ts +22 -0
  79. package/dist/client/silex-lib/src/ts/constants.d.ts +32 -0
  80. package/dist/client/silex-lib/src/ts/page.d.ts +2 -0
  81. package/dist/client/silex-lib/src/ts/types.d.ts +339 -0
  82. package/dist/client/types.d.ts +59 -35
  83. package/dist/plugins/client/client/events.d.ts +19 -10
  84. package/dist/plugins/client/client/events.js +11 -0
  85. package/dist/plugins/client/client/events.js.map +1 -1
  86. package/dist/plugins/client/plugins/client/template.js +119 -71
  87. package/dist/plugins/client/plugins/client/template.js.map +1 -1
  88. package/dist/plugins/client/plugins/client/website-info.d.ts +1 -0
  89. package/dist/plugins/client/plugins/client/website-info.js +72 -0
  90. package/dist/plugins/client/plugins/client/website-info.js.map +1 -0
  91. package/dist/plugins/client/types.d.ts +59 -35
  92. package/dist/plugins/client/types.js +23 -0
  93. package/dist/plugins/client/types.js.map +1 -1
  94. package/dist/plugins/server/constants.d.ts +3 -0
  95. package/dist/plugins/server/constants.js +28 -1
  96. package/dist/plugins/server/constants.js.map +1 -1
  97. package/dist/plugins/server/plugins/server/Cache.js +9 -5
  98. package/dist/plugins/server/plugins/server/Cache.js.map +1 -1
  99. package/dist/plugins/server/plugins/server/DownloadConnector.d.ts +29 -0
  100. package/dist/plugins/server/plugins/server/DownloadConnector.js +127 -0
  101. package/dist/plugins/server/plugins/server/DownloadConnector.js.map +1 -0
  102. package/dist/plugins/server/plugins/server/FtpConnector.d.ts +5 -2
  103. package/dist/plugins/server/plugins/server/FtpConnector.js +38 -23
  104. package/dist/plugins/server/plugins/server/FtpConnector.js.map +1 -1
  105. package/dist/plugins/server/plugins/server/GitlabConnector.d.ts +63 -9
  106. package/dist/plugins/server/plugins/server/GitlabConnector.js +367 -91
  107. package/dist/plugins/server/plugins/server/GitlabConnector.js.map +1 -1
  108. package/dist/plugins/server/plugins/server/GitlabHostingConnector.d.ts +16 -0
  109. package/dist/plugins/server/plugins/server/GitlabHostingConnector.js +209 -0
  110. package/dist/plugins/server/plugins/server/GitlabHostingConnector.js.map +1 -0
  111. package/dist/plugins/server/plugins/server/SslPlugin.js +6 -6
  112. package/dist/plugins/server/plugins/server/SslPlugin.js.map +1 -1
  113. package/dist/plugins/server/plugins/server/StaticPlugin.d.ts +8 -1
  114. package/dist/plugins/server/plugins/server/StaticPlugin.js +5 -31
  115. package/dist/plugins/server/plugins/server/StaticPlugin.js.map +1 -1
  116. package/dist/plugins/server/server/config.js +8 -9
  117. package/dist/plugins/server/server/config.js.map +1 -1
  118. package/dist/plugins/server/server/connectors/FsHosting.d.ts +3 -2
  119. package/dist/plugins/server/server/connectors/FsHosting.js +18 -7
  120. package/dist/plugins/server/server/connectors/FsHosting.js.map +1 -1
  121. package/dist/plugins/server/server/connectors/FsStorage.d.ts +3 -1
  122. package/dist/plugins/server/server/connectors/FsStorage.js +35 -28
  123. package/dist/plugins/server/server/connectors/FsStorage.js.map +1 -1
  124. package/dist/plugins/server/server/connectors/connectors.d.ts +7 -7
  125. package/dist/plugins/server/server/connectors/connectors.js +6 -7
  126. package/dist/plugins/server/server/connectors/connectors.js.map +1 -1
  127. package/dist/plugins/server/server/events.js +16 -0
  128. package/dist/plugins/server/server/events.js.map +1 -1
  129. package/dist/plugins/server/server/jobs.d.ts +6 -0
  130. package/dist/plugins/server/server/jobs.js +12 -8
  131. package/dist/plugins/server/server/jobs.js.map +1 -1
  132. package/dist/plugins/server/server/utils/validation.js +1 -2
  133. package/dist/plugins/server/server/utils/validation.js.map +1 -1
  134. package/dist/plugins/server/types.d.ts +59 -35
  135. package/dist/plugins/server/types.js +24 -1
  136. package/dist/plugins/server/types.js.map +1 -1
  137. package/dist/server/constants.js +27 -1
  138. package/dist/server/plugins/server/Cache.js +9 -5
  139. package/dist/server/server/api/api.js +1 -1
  140. package/dist/server/server/api/connectorApi.js +154 -25
  141. package/dist/server/server/api/publicationApi.js +17 -25
  142. package/dist/server/server/api/websiteApi.js +30 -8
  143. package/dist/server/server/cli.js +9 -6
  144. package/dist/server/server/config.js +8 -9
  145. package/dist/server/server/connectors/FsHosting.js +17 -7
  146. package/dist/server/server/connectors/FsStorage.js +34 -28
  147. package/dist/server/server/connectors/connectors.js +6 -7
  148. package/dist/server/server/express.js +4 -5
  149. package/dist/server/server/index.js +5 -1
  150. package/dist/server/server/jobs.js +11 -8
  151. package/dist/server/server/utils/validation.js +1 -2
  152. package/dist/server/types.js +13 -1
  153. package/package.json +56 -42
  154. package/public/assets/download.png +0 -0
  155. package/public/assets/favicon.ico +0 -0
  156. package/public/assets/favicon.png +0 -0
  157. package/public/assets/ftp.png +0 -0
  158. package/public/assets/gitlab.png +0 -0
  159. package/public/assets/gitlab2.png +0 -0
  160. package/public/assets/laptop.png +0 -0
  161. package/public/assets/logo-silex-small.png +0 -0
  162. package/public/silex.js +5 -23
  163. package/src/css/_variables.scss +23 -20
  164. package/src/css/dialog.scss +27 -1
  165. package/src/css/fonts.scss +31 -0
  166. package/src/css/footer.scss +12 -0
  167. package/src/css/grapesjs-light.scss +180 -0
  168. package/src/css/grapesjs-plugins.scss +227 -0
  169. package/src/css/grapesjs.scss +84 -10
  170. package/src/css/index.scss +12 -1
  171. package/src/css/light.scss +7 -0
  172. package/src/css/project-bar.scss +32 -16
  173. package/src/css/silex.scss +79 -5
  174. package/src/css/website-info.scss +14 -0
  175. package/src/html/index.pug +3 -3
  176. package/src/ts/client/api.ts +38 -14
  177. package/src/ts/client/assetUrl.test.ts +164 -0
  178. package/src/ts/client/assetUrl.ts +254 -0
  179. package/src/ts/client/config.ts +133 -5
  180. package/src/ts/client/events.ts +21 -9
  181. package/src/ts/client/grapesjs/LoginDialog.ts +4 -2
  182. package/src/ts/client/grapesjs/PublicationManager.ts +180 -54
  183. package/src/ts/client/grapesjs/PublicationUi.ts +122 -86
  184. package/src/ts/client/grapesjs/breadcrumbs.ts +79 -0
  185. package/src/ts/client/grapesjs/css-props.ts +910 -0
  186. package/src/ts/client/grapesjs/eleventy.ts +11 -8
  187. package/{dist/plugins/client/page.js → src/ts/client/grapesjs/footer.ts} +24 -13
  188. package/src/ts/client/grapesjs/img.ts +147 -0
  189. package/src/ts/client/grapesjs/index.ts +234 -52
  190. package/src/ts/client/grapesjs/internal-links.test.ts +2 -1
  191. package/src/ts/client/grapesjs/internal-links.ts +14 -7
  192. package/src/ts/client/grapesjs/keymaps.ts +207 -0
  193. package/src/ts/client/grapesjs/new-page-dialog.ts +2 -3
  194. package/src/ts/client/grapesjs/page-panel.ts +92 -7
  195. package/src/ts/client/grapesjs/project-bar.ts +116 -72
  196. package/src/ts/client/grapesjs/resize-panel.ts +20 -0
  197. package/src/ts/client/grapesjs/rich-text.ts +21 -13
  198. package/src/ts/client/grapesjs/semantic.ts +3 -3
  199. package/src/ts/client/grapesjs/settings-sections.ts +117 -0
  200. package/src/ts/client/grapesjs/settings.ts +174 -96
  201. package/src/ts/client/grapesjs/storage.ts +98 -33
  202. package/src/ts/client/grapesjs/symbolDialogs.ts +3 -4
  203. package/src/ts/{plugins/server/AuthPlugin.ts → client/grapesjs/view-buttons.ts} +23 -19
  204. package/src/ts/client/index.ts +35 -16
  205. package/src/ts/client/publication-transformers.test.ts +207 -0
  206. package/src/ts/client/publication-transformers.ts +280 -0
  207. package/{dist/plugins/client/client/utils.js → src/ts/client/publish-custom-code-block.ts} +14 -8
  208. package/src/ts/client/publish-fonts.ts +36 -0
  209. package/src/ts/client/utils.ts +53 -1
  210. package/src/ts/constants.ts +31 -0
  211. package/src/ts/page.ts +2 -2
  212. package/src/ts/plugins/client/template.ts +125 -75
  213. package/src/ts/plugins/client/website-info.ts +84 -0
  214. package/src/ts/plugins/server/Cache.ts +6 -2
  215. package/src/ts/plugins/server/DownloadConnector.ts +146 -0
  216. package/src/ts/plugins/server/FtpConnector.ts +47 -21
  217. package/src/ts/plugins/server/GitlabConnector.ts +423 -108
  218. package/src/ts/plugins/server/GitlabHostingConnector.ts +215 -0
  219. package/src/ts/plugins/server/SslPlugin.ts +5 -5
  220. package/src/ts/plugins/server/StaticPlugin.ts +3 -30
  221. package/src/ts/server/api/connectorApi.ts +165 -28
  222. package/src/ts/server/api/publicationApi.ts +17 -24
  223. package/src/ts/server/api/websiteApi.ts +57 -14
  224. package/src/ts/server/cli.ts +7 -5
  225. package/src/ts/server/config.ts +9 -10
  226. package/src/ts/server/connectors/FsHosting.ts +14 -8
  227. package/src/ts/server/connectors/FsStorage.ts +40 -7
  228. package/src/ts/server/connectors/connectors.ts +8 -6
  229. package/src/ts/server/events.ts +17 -0
  230. package/src/ts/server/express.ts +2 -2
  231. package/src/ts/server/index.ts +6 -0
  232. package/src/ts/server/jobs.ts +14 -2
  233. package/src/ts/server/utils/BackwardCompat.ts +530 -529
  234. package/src/ts/types.ts +78 -34
  235. package/dist/plugins/client/client/utils.d.ts +0 -1
  236. package/dist/plugins/client/client/utils.js.map +0 -1
  237. package/dist/plugins/client/page.d.ts +0 -2
  238. package/dist/plugins/client/page.js.map +0 -1
  239. package/dist/plugins/client/plugins/client/publicationRenderer.d.ts +0 -2
  240. package/dist/plugins/client/plugins/client/publicationRenderer.js +0 -128
  241. package/dist/plugins/client/plugins/client/publicationRenderer.js.map +0 -1
  242. package/dist/plugins/server/plugins/server/AuthPlugin.d.ts +0 -1
  243. package/dist/plugins/server/plugins/server/AuthPlugin.js +0 -38
  244. package/dist/plugins/server/plugins/server/AuthPlugin.js.map +0 -1
  245. package/dist/plugins/server/plugins/server/HooksPlugin.d.ts +0 -7
  246. package/dist/plugins/server/plugins/server/HooksPlugin.js +0 -74
  247. package/dist/plugins/server/plugins/server/HooksPlugin.js.map +0 -1
  248. package/src/example-client-config.js +0 -64
  249. package/src/ts/plugins/client/publicationRenderer.ts +0 -128
  250. package/src/ts/plugins/server/HooksPlugin.ts +0 -76
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ts/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAqBH,MAAa,QAAS,SAAQ,KAAK;IACY;IAA7C,YAAY,OAAe,EAAkB,cAAsB;QACjE,KAAK,CAAC,OAAO,CAAC,CAAA;QAD6B,mBAAc,GAAd,cAAc,CAAQ;QAEjE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;IACpD,CAAC;CACF;AALD,4BAKC;AA+CD,KAAK;AACL,cAAc;AACD,QAAA,kBAAkB,GAAgB;AAC7C,YAAY;AACZ,aAAa;AACb,aAAa;AACb,eAAe;AACf,YAAY;AACZ,cAAc;AACd,kBAAkB;CACJ,CAAA;AAyDhB,IAAY,IAEX;AAFD,WAAY,IAAI;IACd,iBAAS,CAAA;AACX,CAAC,EAFW,IAAI,oBAAJ,IAAI,QAEf;AAoDD;;GAEG;AACH,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,oCAAmB,CAAA;AACrB,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAuDD;;GAEG;AACH,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,wCAA2B,CAAA;IAC3B,gCAAmB,CAAA;IACnB,4BAAe,CAAA;AACjB,CAAC,EAJW,SAAS,yBAAT,SAAS,QAIpB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ts/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAmBH,MAAa,QAAS,SAAQ,KAAK;IACY;IAA7C,YAAY,OAAe,EAAkB,cAAsB;QACjE,KAAK,CAAC,OAAO,CAAC,CAAA;QAD6B,mBAAc,GAAd,cAAc,CAAQ;QAEjE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;IACpD,CAAC;CACF;AALD,4BAKC;AAgDD,KAAK;AACL,cAAc;AACD,QAAA,kBAAkB,GAAgB;AAC7C,YAAY;AACZ,aAAa;AACb,aAAa;AACb,eAAe;AACf,YAAY;AACZ,cAAc;AACd,kBAAkB;CACJ,CAAA;AAuDhB,0BAA0B;AAC1B,oDAAoD;AACpD,4BAA4B;AAC5B,GAAG;AACH,EAAE;AACF,8BAA8B;AAC9B,iBAAiB;AACjB,qBAAqB;AACrB,0CAA0C;AAC1C,4BAA4B;AAC5B,GAAG;AAEH,IAAY,IAEX;AAFD,WAAY,IAAI;IACd,iBAAS,CAAA;AACX,CAAC,EAFW,IAAI,oBAAJ,IAAI,QAEf;AAkCD,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,mCAAa,CAAA;IACb,qCAAe,CAAA;IACf,iCAAW,CAAA;IACX,qCAAe,CAAA;AACjB,CAAC,EALW,kBAAkB,kCAAlB,kBAAkB,QAK7B;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,0BAAa,CAAA;IACb,wBAAW,CAAA;AACb,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AA2CD;;GAEG;AACH,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,oCAAmB,CAAA;AACrB,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAuDD;;GAEG;AACH,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,wCAA2B,CAAA;IAC3B,gCAAmB,CAAA;IACnB,4BAAe,CAAA;AACjB,CAAC,EAJW,SAAS,yBAAT,SAAS,QAIpB"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.API_WEBSITE_META_WRITE = exports.API_WEBSITE_META_READ = exports.API_WEBSITE_ASSETS_WRITE = exports.API_WEBSITE_ASSET_READ = exports.API_WEBSITE_LIST = exports.API_WEBSITE_DELETE = exports.API_WEBSITE_CREATE = exports.API_WEBSITE_WRITE = exports.API_WEBSITE_READ = exports.API_WEBSITE_PATH = exports.API_PUBLICATION_STATUS = exports.API_PUBLICATION_PUBLISH = exports.API_PUBLICATION_PATH = exports.API_CONNECTOR_LOGIN_CALLBACK = exports.API_CONNECTOR_SETTINGS = exports.API_CONNECTOR_LOGIN = exports.API_CONNECTOR_LOGOUT = exports.API_CONNECTOR_LIST = exports.API_CONNECTOR_USER = exports.API_CONNECTOR_PATH = exports.API_PATH = exports.CLIENT_CONFIG_FILE_NAME = exports.DEFAULT_LANGUAGE = exports.DEFAULT_WEBSITE_ID = exports.WEBSITE_META_DATA_FILE = exports.WEBSITE_DATA_FILE = void 0;
3
+ exports.DEV_MESSAGE = exports.SILEX_VERSION = exports.API_WEBSITE_META_WRITE = exports.API_WEBSITE_META_READ = exports.API_WEBSITE_ASSETS_WRITE = exports.API_WEBSITE_ASSET_READ = exports.API_WEBSITE_LIST = exports.API_WEBSITE_DUPLICATE = exports.API_WEBSITE_DELETE = exports.API_WEBSITE_CREATE = exports.API_WEBSITE_WRITE = exports.API_WEBSITE_READ = exports.API_WEBSITE_PATH = exports.API_PUBLICATION_STATUS = exports.API_PUBLICATION_PUBLISH = exports.API_PUBLICATION_PATH = exports.API_CONNECTOR_LOGIN_CALLBACK = exports.API_CONNECTOR_SETTINGS = exports.API_CONNECTOR_LOGIN = exports.API_CONNECTOR_LOGOUT = exports.API_CONNECTOR_LIST = exports.API_CONNECTOR_USER = exports.API_CONNECTOR_PATH = exports.API_PATH = exports.CLIENT_CONFIG_FILE_NAME = exports.DEFAULT_LANGUAGE = exports.DEFAULT_WEBSITE_ID = exports.WEBSITE_META_DATA_FILE = exports.WEBSITE_DATA_FILE = void 0;
4
4
  exports.WEBSITE_DATA_FILE = 'website.json';
5
5
  exports.WEBSITE_META_DATA_FILE = 'meta.json';
6
6
  exports.DEFAULT_WEBSITE_ID = 'default';
@@ -22,8 +22,34 @@ exports.API_WEBSITE_READ = '/';
22
22
  exports.API_WEBSITE_WRITE = '/';
23
23
  exports.API_WEBSITE_CREATE = '/';
24
24
  exports.API_WEBSITE_DELETE = '/';
25
+ exports.API_WEBSITE_DUPLICATE = '/duplicate';
25
26
  exports.API_WEBSITE_LIST = '/';
26
27
  exports.API_WEBSITE_ASSET_READ = '/assets';
27
28
  exports.API_WEBSITE_ASSETS_WRITE = '/assets';
28
29
  exports.API_WEBSITE_META_READ = '/meta';
29
30
  exports.API_WEBSITE_META_WRITE = '/meta';
31
+ try {
32
+ exports.SILEX_VERSION = SILEX_VERSION_ENV;
33
+ }
34
+ catch (e) {
35
+ exports.SILEX_VERSION = exports.SILEX_VERSION || '3.0.0';
36
+ }
37
+ exports.DEV_MESSAGE = `
38
+ __________________________________________________________
39
+
40
+ Create static websites visually, with dynamic content,
41
+ in the free spirit of the web.
42
+
43
+ ███████ ██ ██ ███████ ██ ██ ██ ██ ██████
44
+ ██ ██ ██ ██ ██ ██ ██ ██ ██
45
+ ███████ ██ ██ █████ ███ ██ ██ █████
46
+ ██ ██ ██ ██ ██ ██ ██ ██ ██
47
+ ███████ ██ ███████ ███████ ██ ██ ████ ██████ ${exports.SILEX_VERSION.slice(1)}
48
+
49
+ Users are expected to contribute:
50
+
51
+ * Web designers: https://docs.silex.me/en/user/contribute
52
+ * Developers: https://docs.silex.me/en/dev/contribute
53
+
54
+ __________________________________________________________
55
+ `;
@@ -1,15 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.withCache = exports.noCache = void 0;
3
+ exports.noCache = noCache;
4
+ exports.withCache = withCache;
4
5
  function noCache(req, res, next) {
5
6
  res.header('Cache-Control', 'private,no-cache,no-store,must-revalidate,proxy-revalidate');
6
7
  res.header('Expires', '-1');
7
8
  res.header('Pragma', 'no-cache');
8
9
  next();
9
10
  }
10
- exports.noCache = noCache;
11
11
  function withCache(req, res, next) {
12
- res.header('Cache-Control', 'public,max-age=86400,immutable');
13
- next();
12
+ if (req.url.endsWith('.html') || req.url.endsWith('/')) {
13
+ noCache(req, res, next);
14
+ }
15
+ else {
16
+ res.header('Cache-Control', 'public,max-age=86400,immutable');
17
+ next();
18
+ }
14
19
  }
15
- exports.withCache = withCache;
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = default_1;
6
7
  const express_1 = require("express");
7
8
  const Cache_1 = require("../../plugins/server/Cache");
8
9
  const connectorApi_1 = __importDefault(require("./connectorApi"));
@@ -17,4 +18,3 @@ function default_1(config) {
17
18
  router.use(constants_1.API_PUBLICATION_PATH, (0, publicationApi_1.default)(config));
18
19
  return router;
19
20
  }
20
- exports.default = default_1;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
3
4
  const express_1 = require("express");
4
5
  const constants_1 = require("../../constants");
5
6
  const validation_1 = require("../utils/validation");
@@ -14,7 +15,17 @@ function default_1(config) {
14
15
  router.post(constants_1.API_CONNECTOR_LOGOUT, routeLogout);
15
16
  return router;
16
17
  }
17
- exports.default = default_1;
18
+ function validateStatus(status, _default = 500) {
19
+ if (!status) {
20
+ console.warn(`Status code is undefined, returning default ${_default}`);
21
+ return _default;
22
+ }
23
+ status = parseInt(status.toString());
24
+ if (status >= 100 && status < 600)
25
+ return status;
26
+ console.warn(`Invalid status code ${status}, returning default ${_default}}`);
27
+ return _default;
28
+ }
18
29
  async function routeUser(req, res) {
19
30
  try {
20
31
  const config = (0, validation_1.requiredParam)(req.app.get('config'), 'Config object on express js APP');
@@ -44,8 +55,8 @@ async function routeUser(req, res) {
44
55
  res.json(user);
45
56
  }
46
57
  catch (error) {
47
- console.error('Error in the login status request', error);
48
- res.status(error?.code ?? error?.httpStatusCode ?? 500).json({
58
+ console.error('Error in the user request', error, error.code);
59
+ res.status(validateStatus(error.code ?? error.httpStatusCode, 500)).json({
49
60
  error: true,
50
61
  message: error.message,
51
62
  });
@@ -64,7 +75,7 @@ async function routeListConnectors(req, res) {
64
75
  }
65
76
  catch (error) {
66
77
  console.error('Error while listing connectors', error);
67
- res.status(error?.code ?? error?.httpStatusCode ?? 500).json({
78
+ res.status(validateStatus(error?.code ?? error?.httpStatusCode, 500)).json({
68
79
  error: true,
69
80
  message: 'Error while listing connectors: ' + error.message,
70
81
  });
@@ -72,7 +83,7 @@ async function routeListConnectors(req, res) {
72
83
  }
73
84
  catch (error) {
74
85
  console.error('Error in the list connectors request', error);
75
- res.status(error?.code ?? error?.httpStatusCode ?? 400).json({
86
+ res.status(validateStatus(error?.code ?? error?.httpStatusCode, 400)).json({
76
87
  error: true,
77
88
  message: 'Error in the list connectors request: ' + error.message,
78
89
  });
@@ -89,7 +100,7 @@ async function routeLogin(req, res) {
89
100
  if (!connector)
90
101
  throw new Error(`Connector not found ${connectorId} ${type}`);
91
102
  if (await connector.isLoggedIn(session)) {
92
- res.redirect(`${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_LOGIN_CALLBACK}?connectorId=${connectorId}&type=${type}`);
103
+ res.redirect(`${config.url}${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_LOGIN_CALLBACK}?connectorId=${connectorId}&type=${type}`);
93
104
  return;
94
105
  }
95
106
  const oauthUrl = await connector.getOAuthUrl(session);
@@ -98,14 +109,14 @@ async function routeLogin(req, res) {
98
109
  }
99
110
  else {
100
111
  const redirectTo = await connector.getSettingsForm(session, '') ?
101
- `${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_SETTINGS}?connectorId=${connectorId}&type=${type}` :
102
- `${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_LOGIN_CALLBACK}?connectorId=${connectorId}&type=${type}`;
112
+ `${config.url}${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_SETTINGS}?connectorId=${connectorId}&type=${type}` :
113
+ `${config.url}${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_LOGIN_CALLBACK}?connectorId=${connectorId}&type=${type}`;
103
114
  res.send(await connector.getLoginForm(session, redirectTo));
104
115
  }
105
116
  }
106
117
  catch (error) {
107
118
  console.error('Error in the login request', error);
108
- res.status(error?.code ?? error?.httpStatusCode ?? 400).json({
119
+ res.status(validateStatus(error?.code ?? error?.httpStatusCode, 400)).json({
109
120
  error: true,
110
121
  message: 'Error in the login request: ' + error.message,
111
122
  });
@@ -133,12 +144,12 @@ async function routeLoginSuccess(req, res) {
133
144
  ...body,
134
145
  });
135
146
  }
136
- res.send(getEndAuthHtml('Logged in', false, connectorId, connector.getOptions(body)));
147
+ res.send(getEndAuthHtml('Logged in', false, connectorId, type, connector.getOptions(body)));
137
148
  }
138
149
  catch (error) {
139
150
  res
140
- .status(error?.code ?? error?.httpStatusCode ?? 500)
141
- .send(getEndAuthHtml(error.message, true));
151
+ .status(validateStatus(error?.code ?? error?.httpStatusCode, 500))
152
+ .send(getEndAuthHtml(error.message, true, req.query.connectorId, req.query.type));
142
153
  }
143
154
  }
144
155
  async function routeLogout(req, res) {
@@ -160,7 +171,7 @@ async function routeLogout(req, res) {
160
171
  }
161
172
  catch (error) {
162
173
  console.error('Error while logging out', error);
163
- res.status(error?.code ?? error?.httpStatusCode ?? 500).json({
174
+ res.status(validateStatus(error?.code ?? error?.httpStatusCode, 500)).json({
164
175
  error: true,
165
176
  message: 'Error while logging out: ' + error.message,
166
177
  });
@@ -169,36 +180,154 @@ async function routeLogout(req, res) {
169
180
  }
170
181
  catch (error) {
171
182
  console.error('Error in the logout request', error);
172
- res.status(error?.code ?? error?.httpStatusCode ?? 400).json({
183
+ res.status(validateStatus(error?.code ?? error?.httpStatusCode, 400)).json({
173
184
  error: true,
174
185
  message: 'Error in the logout request: ' + error.message,
175
186
  });
176
187
  return;
177
188
  }
178
189
  }
179
- function getEndAuthHtml(message, error, connectorId, options) {
190
+ function getEndAuthHtml(message, error, connectorId, connectorType, options) {
180
191
  const data = {
181
192
  type: 'login',
182
193
  error,
183
194
  message,
184
195
  connectorId,
196
+ connectorType,
185
197
  options,
186
198
  };
199
+ const status = error ? 'Error' : 'Success';
187
200
  return `
188
- <html>
201
+ <!DOCTYPE html><html lang="en">
189
202
  <head>
190
- <script>
191
- if(window.opener) {
192
- window.opener.postMessage(${JSON.stringify(data)}, '*')
193
- window.close()
194
- } else {
195
- window.location.href = '/'
203
+ <title>Authentication ${status}</title>
204
+ <style>
205
+ :root {
206
+ --primaryColor: #333333;
207
+ --secondaryColor: #ddd;
208
+ --tertiaryColor: #8873FE;
209
+ --quaternaryColor: #A291FF;
210
+ --darkerPrimaryColor: #292929;
211
+ --lighterPrimaryColor: #575757;
212
+ }
213
+
214
+ body {
215
+ font-family: Arial, sans-serif;
216
+ text-align: center;
217
+ margin: 50px;
218
+ color: var(--primaryColor);
219
+ background-color: var(--secondaryColor);
220
+ }
221
+
222
+ h1 {
223
+ color: var(--tertiaryColor);
224
+ }
225
+
226
+ p {
227
+ font-size: 18px;
228
+ }
229
+
230
+ a {
231
+ color: var(--tertiaryColor);
232
+ text-decoration: none;
233
+ }
234
+
235
+ a:hover {
236
+ text-decoration: underline;
237
+ }
238
+
239
+ .container {
240
+ max-width: 600px;
241
+ margin: auto;
242
+ }
243
+
244
+ .button {
245
+ display: inline-block;
246
+ margin-top: 20px;
247
+ padding: 10px 20px;
248
+ font-size: 16px;
249
+ color: var(--secondaryColor);
250
+ background-color: var(--tertiaryColor);
251
+ border: none;
252
+ border-radius: 5px;
253
+ text-decoration: none;
254
+ cursor: pointer;
255
+ }
256
+
257
+ .button:hover {
258
+ background-color: var(--quaternaryColor); /* Slightly lighter shade of tertiary color */
259
+ }
260
+
261
+ .error {
262
+ display: none;
263
+ margin-top: 20px;
264
+ padding: 15px;
265
+ border: 1px solid var(--tertiaryColor);
266
+ border-radius: 5px;
267
+ text-wrap: wrap;
196
268
  }
197
- </script>
269
+
270
+ </style>
198
271
  </head>
199
272
  <body>
200
- <p>${message}</p>
201
- <p>Close this window or <a href="/">go back to /</a></p>
273
+ <div class="container">
274
+ <div id="message">
275
+ <h1>Authentication ${status}</h1>
276
+ <p>${error ? '' : message}</p>
277
+ </div>
278
+ ${error ? `
279
+ <p><a data-link-to href="/">click here to continue</a>.</p>
280
+ <a data-link-to href="/" class="button">Retry</a>
281
+ <pre id="error-container" class="error">${message}</pre>
282
+ <script>
283
+ document.getElementById('error-container').style.display = "block";
284
+ fetch("${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_LOGOUT}?connectorId=${connectorId}&type=${connectorType}", {
285
+ method: 'POST',
286
+ headers: {
287
+ 'Content-Type': 'application/json',
288
+ credentials: 'include', // sends the cookies with the request
289
+ },
290
+ })
291
+ if(window.opener && window.opener !== window) {
292
+ const linksTo = document.querySelectorAll('[data-link-to]');
293
+ linksTo.forEach(link => {
294
+ link.addEventListener('click', (e) => {
295
+ e.preventDefault();
296
+ const data = ${JSON.stringify(data)};
297
+ window.opener.postMessage(data, '*');
298
+ window.close();
299
+ });
300
+ });
301
+ }
302
+ </script>
303
+ ` : `
304
+ <p>If this window doesn’t close automatically, <a href="/">click here to return to the homepage</a>.</p>
305
+ <a href="/" class="button">Go to Homepage</a>
306
+ <pre id="error-container" class="error"></pre>
307
+ <script>
308
+ const data = ${JSON.stringify(data)};
309
+ const errorContainer = document.getElementById('error-container');
310
+ const messageContainer = document.getElementById('message');
311
+
312
+ // Check if the window was opened programmatically and is valid
313
+ if (window.opener && window.opener !== window) {
314
+ try {
315
+ // Send a postMessage to the opener
316
+ window.opener.postMessage(data, '*');
317
+ // Attempt to close the window
318
+ window.close();
319
+ } catch (e) {
320
+ // Display error message if closing fails
321
+ errorContainer.innerText = "Unable to close the window. Please close it manually.";
322
+ errorContainer.style.display = "block";
323
+ }
324
+ } else {
325
+ messageContainer.innerHTML = '<h1>Redirecting, please wait...</h1>';
326
+ window.location.href = '/'
327
+ }
328
+ </script>
329
+ `}
330
+ </div>
202
331
  </body>
203
332
  </html>
204
333
  `;
@@ -1,13 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getStorageConnector = exports.getHostingConnector = exports.PublicationError = void 0;
3
+ exports.PublicationError = void 0;
4
+ exports.getHostingConnector = getHostingConnector;
5
+ exports.getStorageConnector = getStorageConnector;
6
+ exports.default = default_1;
4
7
  const express_1 = require("express");
5
8
  const constants_1 = require("../../constants");
6
- const jobs_1 = require("../jobs");
7
9
  const types_1 = require("../../types");
8
10
  const connectors_1 = require("../connectors/connectors");
9
11
  const validation_1 = require("../utils/validation");
10
12
  const events_1 = require("../events");
13
+ const jobs_1 = require("../jobs");
11
14
  class PublicationError extends Error {
12
15
  code;
13
16
  constructor(message, code) {
@@ -27,7 +30,6 @@ async function getHostingConnector(session, config, connectorId) {
27
30
  }
28
31
  return hostingConnector;
29
32
  }
30
- exports.getHostingConnector = getHostingConnector;
31
33
  async function getStorageConnector(session, config, connectorId) {
32
34
  const storageConnector = await (0, connectors_1.getConnector)(config, session, types_1.ConnectorType.STORAGE, connectorId);
33
35
  if (!storageConnector) {
@@ -38,7 +40,6 @@ async function getStorageConnector(session, config, connectorId) {
38
40
  }
39
41
  return storageConnector;
40
42
  }
41
- exports.getStorageConnector = getStorageConnector;
42
43
  function default_1(config) {
43
44
  const router = (0, express_1.Router)();
44
45
  router.get(constants_1.API_PUBLICATION_STATUS, async function (req, res) {
@@ -66,35 +67,27 @@ function default_1(config) {
66
67
  const hostingId = (0, validation_1.requiredParam)(query.hostingId, 'hostingId in query');
67
68
  const session = (0, validation_1.requiredParam)(req['session'], 'session on express request');
68
69
  const data = body;
69
- const { files, publication, assets } = data;
70
- if (!files || !publication || !assets) {
71
- throw new PublicationError('Missing data from request: files, publication or assets', 400);
70
+ const { files } = data;
71
+ if (!files) {
72
+ throw new PublicationError('Missing files in body', 400);
72
73
  }
73
74
  config.emit(events_1.ServerEvent.PUBLISH_START, data);
74
75
  const hostingConnector = await getHostingConnector(session, config, hostingId);
75
76
  const storage = await getStorageConnector(session, config, storageId);
76
- const assetsFiles = await Promise.all(assets.map(async (asset) => {
77
- if (!asset.path)
78
- throw new PublicationError('Missing path in asset', 400);
79
- if (!asset.src)
80
- throw new PublicationError('Missing src in asset', 400);
81
- const prefix = constants_1.API_WEBSITE_ASSET_READ.replace(/^\//, '');
82
- const src = asset.src.startsWith(prefix) ? asset.src.substring(prefix.length) : asset.src;
77
+ const filesList = await Promise.all(files.map(async (file) => {
78
+ const fileWithContent = file;
79
+ const fileWithSrc = file;
80
+ if (!fileWithContent.content && !fileWithSrc.src)
81
+ throw new PublicationError('Missing content or src in file', 400);
82
+ const src = fileWithSrc.src;
83
83
  return {
84
- path: asset.path,
85
- content: await storage.readAsset(session, websiteId, src),
84
+ path: file.permalink ?? file.path,
85
+ content: fileWithContent.content ?? await storage.readAsset(session, websiteId, fileWithSrc.src),
86
86
  };
87
87
  }));
88
- const filesList = files.flatMap(file => ([{
89
- path: file.htmlPath,
90
- content: file.html,
91
- }, {
92
- path: file.cssPath,
93
- content: file.css,
94
- }])).concat(assetsFiles);
95
88
  res.json({
96
89
  url: await hostingConnector.getUrl(session, websiteId),
97
- job: await hostingConnector.publish(session, websiteId, filesList),
90
+ job: await hostingConnector.publish(session, websiteId, filesList, jobs_1.jobManager),
98
91
  });
99
92
  }
100
93
  catch (err) {
@@ -111,4 +104,3 @@ function default_1(config) {
111
104
  });
112
105
  return router;
113
106
  }
114
- exports.default = default_1;
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = default_1;
6
7
  const express_1 = require("express");
7
8
  const formidable_1 = __importDefault(require("formidable"));
8
9
  const constants_1 = require("../../constants");
@@ -175,6 +176,23 @@ function default_1(config, opts = {}) {
175
176
  }
176
177
  }
177
178
  });
179
+ router.post(constants_1.API_WEBSITE_DUPLICATE, async (req, res) => {
180
+ try {
181
+ const query = req.query;
182
+ const websiteId = (0, validation_1.requiredParam)(query.websiteId, 'New website id');
183
+ await duplicateWebsite(req['session'], websiteId, query.connectorId);
184
+ res.status(200).json({ message: 'Website duplicated' });
185
+ }
186
+ catch (e) {
187
+ console.error('Error duplicating website data', e);
188
+ if (e.httpStatusCode) {
189
+ res.status(e.httpStatusCode).json({ message: e.message });
190
+ }
191
+ else {
192
+ res.status(500).json({ message: e.message });
193
+ }
194
+ }
195
+ });
178
196
  router.get(constants_1.API_WEBSITE_ASSET_READ + '/:path', async (req, res) => {
179
197
  {
180
198
  try {
@@ -207,7 +225,6 @@ function default_1(config, opts = {}) {
207
225
  const query = req.query;
208
226
  const websiteId = (0, validation_1.requiredParam)(query.websiteId, 'Website id');
209
227
  const form = (0, formidable_1.default)({
210
- filename: (name, ext, part, _form) => `${name}${ext}`,
211
228
  multiples: true,
212
229
  keepExtensions: true,
213
230
  });
@@ -230,11 +247,12 @@ function default_1(config, opts = {}) {
230
247
  });
231
248
  });
232
249
  config.emit(events_1.ServerEvent.WEBSITE_ASSET_STORE_START, { files, websiteId, connectorId });
233
- await writeAssets(req['session'], websiteId, files, connectorId);
250
+ const result = await writeAssets(req['session'], websiteId, files, connectorId);
251
+ const baseUrl = new URL(config.url).pathname.replace(/\/$/, '');
252
+ const data = result.map(path => (0, path_1.join)(baseUrl, constants_1.API_PATH, constants_1.API_WEBSITE_PATH, constants_1.API_WEBSITE_ASSET_READ, path)
253
+ + `?websiteId=${websiteId}&connectorId=${connectorId ? connectorId : ''}`);
234
254
  res.json({
235
- data: files.map(file => constants_1.API_PATH + constants_1.API_WEBSITE_PATH + constants_1.API_WEBSITE_ASSET_READ
236
- + file.path
237
- + `?websiteId=${websiteId}&connectorId=${connectorId ? connectorId : ''}`),
255
+ data,
238
256
  });
239
257
  config.emit(events_1.ServerEvent.WEBSITE_ASSET_STORE_END, null);
240
258
  }
@@ -275,6 +293,10 @@ function default_1(config, opts = {}) {
275
293
  const storageConnector = await getStorageConnector(session, connectorId);
276
294
  return storageConnector.deleteWebsite(session, websiteId);
277
295
  }
296
+ async function duplicateWebsite(session, websiteId, connectorId) {
297
+ const storageConnector = await getStorageConnector(session, connectorId);
298
+ return storageConnector.duplicateWebsite(session, websiteId);
299
+ }
278
300
  async function readAsset(session, websiteId, fileName, connectorId) {
279
301
  const storageConnector = await getStorageConnector(session, connectorId);
280
302
  return storageConnector.readAsset(session, websiteId, `/${fileName}`);
@@ -285,9 +307,9 @@ function default_1(config, opts = {}) {
285
307
  ...file,
286
308
  path: file.path.replace('/assets/', '/'),
287
309
  }));
288
- await storageConnector.writeAssets(session, websiteId, cleanPathFiles);
289
- return files.map(({ path }) => `${path}?websiteId=${websiteId}`);
310
+ const result = await storageConnector.writeAssets(session, websiteId, cleanPathFiles);
311
+ return files
312
+ .map(({ path }, idx) => result && result[idx] ? result[idx] : path);
290
313
  }
291
314
  return router;
292
315
  }
293
- exports.default = default_1;
@@ -11,11 +11,12 @@ const options = (0, cli_1.parse)({
11
11
  'host': ['', 'Sets the host param of the express module "cookie-session".', 'string'],
12
12
  'port': ['p', 'Port to listen to', 'int'],
13
13
  'protocol': ['', 'Sets the protocol param of the express module "cookie-session".', 'string'],
14
- 'config': ['c', 'Path for the server side config file to load at startup', 'file'],
15
- 'client-config': ['', 'Path to client config file to be served on .silex-client.js', 'string'],
16
- 'fs-root': ['', 'Path to the root folder where to store websites. Used by the default connector (fs).', 'string'],
14
+ 'server-config': ['s', 'Path for the server side config file to load at startup', 'file'],
15
+ 'client-config': ['c', 'Path to client config file to be served on .silex-client.js', 'file'],
16
+ 'fs-root': ['', 'Path to the root folder where to store websites. Used by the default storage connector (fs).', 'string'],
17
+ 'fs-hosting-root': ['', 'Path to the root folder where to publish websites. Used by the default hosting connector (fs).', 'string'],
17
18
  'session-name': ['', 'Sets the name param of the express module "cookie-session".', 'string'],
18
- 'session-secret': ['s', 'Session secret', 'string'],
19
+ 'session-secret': ['', 'Session secret', 'string'],
19
20
  'ssl-port': [false, 'Port to listen to for SSL/HTTPS', 'int'],
20
21
  'force-https': [false, 'Force HTTPS', 'boolean'],
21
22
  'ssl-private-key': [false, 'Path to private key for SSL', 'file'],
@@ -35,12 +36,14 @@ if (options.port)
35
36
  process.env.SILEX_PORT = options.port;
36
37
  if (options['protocol'])
37
38
  process.env.SILEX_PROTOCOL = options['protocol'];
38
- if (options.config)
39
- process.env.SILEX_CONFIG = options.config;
39
+ if (options['server-config'])
40
+ process.env.SILEX_SERVER_CONFIG = options['server-config'];
40
41
  if (options['client-config'])
41
42
  process.env.SILEX_CLIENT_CONFIG = options['client-config'];
42
43
  if (options['fs-root'])
43
44
  process.env.SILEX_FS_ROOT = options['fs-root'];
45
+ if (options['fs-hosting-root'])
46
+ process.env.SILEX_FS_HOSTING_ROOT = options['fs-hosting-root'];
44
47
  if (options['session-name'])
45
48
  process.env.SILEX_SESSION_NAME = options['session-name'];
46
49
  if (options['session-secret'])
@@ -20,8 +20,8 @@ class ServerConfig extends silex_plugins_1.Config {
20
20
  };
21
21
  port = process.env.SILEX_PORT;
22
22
  debug = process.env.SILEX_DEBUG === 'true';
23
- url = process.env.SILEX_URL ?? `${process.env.SILEX_PROTOCOL}://${process.env.SILEX_HOST}:${process.env.SILEX_PORT}`;
24
- userConfigPath = process.env.SILEX_CONFIG;
23
+ url = process.env.SILEX_URL?.replace(/\/$/, '') ?? `${process.env.SILEX_PROTOCOL}://${process.env.SILEX_HOST}:${process.env.SILEX_PORT}`;
24
+ userConfigPath = process.env.SILEX_SERVER_CONFIG;
25
25
  configFilePath = (0, path_1.resolve)(__dirname, '../../../.silex.js');
26
26
  getConnectors(type = null) {
27
27
  if (!type) {
@@ -56,12 +56,12 @@ class ServerConfig extends silex_plugins_1.Config {
56
56
  async addRoutes(app) {
57
57
  const path = process.env.SILEX_CLIENT_CONFIG;
58
58
  if (path) {
59
- console.log(`> Serving client side config ${path} at ${constants_1.CLIENT_CONFIG_FILE_NAME}`);
59
+ console.info(`> Serving client side config ${path} at ${constants_1.CLIENT_CONFIG_FILE_NAME}`);
60
60
  try {
61
61
  let clientConfig = (await (0, promises_1.readFile)(path)).toString();
62
62
  app.get(`/${constants_1.CLIENT_CONFIG_FILE_NAME}`, async (req, res) => {
63
63
  if (this.debug) {
64
- console.log('[Debug mode] Reloading config file', path);
64
+ console.info('[Debug mode] Reloading config file', path);
65
65
  clientConfig = (await (0, promises_1.readFile)(path)).toString();
66
66
  }
67
67
  res
@@ -81,7 +81,7 @@ class ServerConfig extends silex_plugins_1.Config {
81
81
  }
82
82
  async loadUserConfig() {
83
83
  if (this.userConfigPath) {
84
- console.log('> Loading user config', this.userConfigPath);
84
+ console.info('> Loading user config', this.userConfigPath);
85
85
  try {
86
86
  await this.addPlugin(this.userConfigPath, {});
87
87
  }
@@ -91,12 +91,11 @@ class ServerConfig extends silex_plugins_1.Config {
91
91
  }
92
92
  }
93
93
  async loadSilexConfig() {
94
- console.log('> Loading config', this.configFilePath);
94
+ console.info('> Loading config', this.configFilePath);
95
95
  try {
96
96
  await this.addPlugin(this.configFilePath, {});
97
97
  }
98
98
  catch (e) {
99
- console.log(e.requireStack[0]);
100
99
  if (e.code === 'MODULE_NOT_FOUND' && (!e.requireStack || !e.requireStack.find(path => path === this.configFilePath))) {
101
100
  console.info('> /!\\ Config file not found', this.configFilePath);
102
101
  }
@@ -108,12 +107,12 @@ class ServerConfig extends silex_plugins_1.Config {
108
107
  async initDefaultConnectors() {
109
108
  if (!this.storageConnectors.length) {
110
109
  this.addStorageConnector(new FsStorage_1.FsStorage(null, {
111
- path: process.env.SILEX_FS_ROOT,
110
+ path: process.env.SILEX_FS_ROOT || (0, path_1.join)(process.cwd(), '/silex/storage'),
112
111
  }));
113
112
  }
114
113
  if (!this.hostingConnectors.length) {
115
114
  this.addHostingConnector(new FsHosting_1.FsHosting(null, {
116
- path: process.env.SILEX_FS_ROOT,
115
+ path: process.env.SILEX_FS_HOSTING_ROOT || (0, path_1.join)(process.cwd(), '/silex/hosting'),
117
116
  }));
118
117
  }
119
118
  }