@silexlabs/silex 3.0.1-alpha.0 → 3.0.2

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 (323) hide show
  1. package/.env.default +20 -0
  2. package/.silex.js +67 -8
  3. package/LICENSE +661 -203
  4. package/README.md +37 -35
  5. package/dist/client/client/api.d.ts +90 -0
  6. package/dist/client/client/assetUrl.d.ts +54 -0
  7. package/dist/client/client/config.d.ts +102 -0
  8. package/dist/client/client/events.d.ts +23 -0
  9. package/dist/client/client/expose.d.ts +8 -0
  10. package/dist/client/client/grapesjs/LoginDialog.d.ts +15 -0
  11. package/dist/client/client/grapesjs/PublicationManager.d.ts +73 -0
  12. package/dist/client/client/grapesjs/PublicationUi.d.ts +59 -0
  13. package/dist/client/client/grapesjs/blocks.d.ts +1 -0
  14. package/dist/client/client/grapesjs/breadcrumbs.d.ts +1 -0
  15. package/dist/client/client/grapesjs/css-props.d.ts +6 -0
  16. package/dist/client/client/grapesjs/footer.d.ts +2 -0
  17. package/dist/client/client/grapesjs/img.d.ts +6 -0
  18. package/dist/client/client/grapesjs/index.d.ts +9 -0
  19. package/dist/client/client/grapesjs/internal-links.d.ts +1 -0
  20. package/dist/client/client/grapesjs/keymaps.d.ts +123 -0
  21. package/dist/client/client/grapesjs/new-page-dialog.d.ts +2 -0
  22. package/dist/client/client/grapesjs/openImport.d.ts +9 -0
  23. package/dist/client/client/grapesjs/page-panel.d.ts +9 -0
  24. package/dist/client/client/grapesjs/project-bar.d.ts +21 -0
  25. package/dist/client/client/grapesjs/resize-panel.d.ts +1 -0
  26. package/dist/client/client/grapesjs/rich-text.d.ts +4 -0
  27. package/dist/client/client/grapesjs/semantic.d.ts +1 -0
  28. package/dist/client/client/grapesjs/settings-sections.d.ts +16 -0
  29. package/dist/client/client/grapesjs/settings.d.ts +4 -0
  30. package/dist/client/client/grapesjs/storage.d.ts +2 -0
  31. package/dist/client/client/grapesjs/symbolDialogs.d.ts +3 -0
  32. package/dist/client/client/grapesjs/view-buttons.d.ts +1 -0
  33. package/dist/client/client/index.d.ts +10 -0
  34. package/dist/client/client/publication-transformers.d.ts +42 -0
  35. package/dist/client/client/publish-custom-code-block.d.ts +4 -0
  36. package/dist/client/client/publish-fonts.d.ts +4 -0
  37. package/dist/client/client/utils.d.ts +22 -0
  38. package/dist/client/constants.d.ts +32 -0
  39. package/dist/client/css/admin.css +1114 -328
  40. package/dist/client/css/admin.css.map +1 -0
  41. package/dist/client/grapesjs-filter-styles/dist/index.d.ts +4 -0
  42. package/dist/client/grapesjs-fonts/dist/index.d.ts +4 -0
  43. package/dist/client/grapesjs-fonts/src/commands.d.ts +3 -0
  44. package/dist/client/grapesjs-fonts/src/fonts.d.ts +4 -0
  45. package/dist/client/grapesjs-storage-rate-limit/dist/index.d.ts +4 -0
  46. package/dist/client/grapesjs-ui-suggest-classes/dist/index.d.ts +4 -0
  47. package/dist/client/index.html +3 -2
  48. package/dist/client/js/main.js +356 -131
  49. package/dist/client/js/main.js.LICENSE.txt +15 -1
  50. package/dist/client/page.d.ts +2 -0
  51. package/dist/client/silex-lib/src/ts/client/api.d.ts +90 -0
  52. package/dist/client/silex-lib/src/ts/client/assetUrl.d.ts +54 -0
  53. package/dist/client/silex-lib/src/ts/client/config.d.ts +102 -0
  54. package/dist/client/silex-lib/src/ts/client/events.d.ts +23 -0
  55. package/dist/client/silex-lib/src/ts/client/expose.d.ts +8 -0
  56. package/dist/client/silex-lib/src/ts/client/grapesjs/LoginDialog.d.ts +15 -0
  57. package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationManager.d.ts +73 -0
  58. package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationUi.d.ts +59 -0
  59. package/dist/client/silex-lib/src/ts/client/grapesjs/blocks.d.ts +1 -0
  60. package/dist/client/silex-lib/src/ts/client/grapesjs/breadcrumbs.d.ts +1 -0
  61. package/dist/client/silex-lib/src/ts/client/grapesjs/css-props.d.ts +6 -0
  62. package/dist/client/silex-lib/src/ts/client/grapesjs/footer.d.ts +2 -0
  63. package/dist/client/silex-lib/src/ts/client/grapesjs/img.d.ts +6 -0
  64. package/dist/client/silex-lib/src/ts/client/grapesjs/index.d.ts +9 -0
  65. package/dist/client/silex-lib/src/ts/client/grapesjs/internal-links.d.ts +1 -0
  66. package/dist/client/silex-lib/src/ts/client/grapesjs/keymaps.d.ts +123 -0
  67. package/dist/client/silex-lib/src/ts/client/grapesjs/new-page-dialog.d.ts +2 -0
  68. package/dist/client/silex-lib/src/ts/client/grapesjs/openImport.d.ts +9 -0
  69. package/dist/client/silex-lib/src/ts/client/grapesjs/page-panel.d.ts +9 -0
  70. package/dist/client/silex-lib/src/ts/client/grapesjs/project-bar.d.ts +21 -0
  71. package/dist/client/silex-lib/src/ts/client/grapesjs/resize-panel.d.ts +1 -0
  72. package/dist/client/silex-lib/src/ts/client/grapesjs/rich-text.d.ts +4 -0
  73. package/dist/client/silex-lib/src/ts/client/grapesjs/semantic.d.ts +1 -0
  74. package/dist/client/silex-lib/src/ts/client/grapesjs/settings-sections.d.ts +16 -0
  75. package/dist/client/silex-lib/src/ts/client/grapesjs/settings.d.ts +4 -0
  76. package/dist/client/silex-lib/src/ts/client/grapesjs/storage.d.ts +2 -0
  77. package/dist/client/silex-lib/src/ts/client/grapesjs/symbolDialogs.d.ts +3 -0
  78. package/dist/client/silex-lib/src/ts/client/grapesjs/view-buttons.d.ts +1 -0
  79. package/dist/client/silex-lib/src/ts/client/index.d.ts +10 -0
  80. package/dist/client/silex-lib/src/ts/client/publication-transformers.d.ts +42 -0
  81. package/dist/client/silex-lib/src/ts/client/publish-custom-code-block.d.ts +4 -0
  82. package/dist/client/silex-lib/src/ts/client/publish-fonts.d.ts +4 -0
  83. package/dist/client/silex-lib/src/ts/client/utils.d.ts +22 -0
  84. package/dist/client/silex-lib/src/ts/constants.d.ts +32 -0
  85. package/dist/client/silex-lib/src/ts/page.d.ts +2 -0
  86. package/dist/client/silex-lib/src/ts/types.d.ts +339 -0
  87. package/dist/client/types.d.ts +339 -0
  88. package/dist/plugins/client/client/events.d.ts +23 -0
  89. package/dist/plugins/client/client/events.js +43 -0
  90. package/dist/plugins/client/client/events.js.map +1 -0
  91. package/dist/plugins/client/plugins/client/template.d.ts +2 -0
  92. package/dist/plugins/client/plugins/client/template.js +234 -0
  93. package/dist/plugins/client/plugins/client/template.js.map +1 -0
  94. package/dist/plugins/client/plugins/client/website-info.d.ts +1 -0
  95. package/dist/plugins/client/plugins/client/website-info.js +72 -0
  96. package/dist/plugins/client/plugins/client/website-info.js.map +1 -0
  97. package/dist/plugins/client/types.d.ts +339 -0
  98. package/dist/plugins/client/types.js +80 -0
  99. package/dist/plugins/client/types.js.map +1 -0
  100. package/dist/plugins/server/constants.d.ts +32 -0
  101. package/dist/plugins/server/constants.js +76 -0
  102. package/dist/plugins/server/constants.js.map +1 -0
  103. package/dist/plugins/server/plugins/server/Cache.d.ts +2 -0
  104. package/dist/plugins/server/plugins/server/Cache.js +36 -0
  105. package/dist/plugins/server/plugins/server/Cache.js.map +1 -0
  106. package/dist/plugins/server/plugins/server/DownloadConnector.d.ts +29 -0
  107. package/dist/plugins/server/plugins/server/DownloadConnector.js +127 -0
  108. package/dist/plugins/server/plugins/server/DownloadConnector.js.map +1 -0
  109. package/dist/plugins/server/plugins/server/FtpConnector.d.ts +86 -0
  110. package/dist/plugins/server/plugins/server/FtpConnector.js +536 -0
  111. package/dist/plugins/server/plugins/server/FtpConnector.js.map +1 -0
  112. package/dist/plugins/server/plugins/server/GitlabConnector.d.ts +135 -0
  113. package/dist/plugins/server/plugins/server/GitlabConnector.js +649 -0
  114. package/dist/plugins/server/plugins/server/GitlabConnector.js.map +1 -0
  115. package/dist/plugins/server/plugins/server/GitlabHostingConnector.d.ts +16 -0
  116. package/dist/plugins/server/plugins/server/GitlabHostingConnector.js +209 -0
  117. package/dist/plugins/server/plugins/server/GitlabHostingConnector.js.map +1 -0
  118. package/dist/plugins/server/plugins/server/PublicationOptimizer.d.ts +0 -0
  119. package/dist/plugins/server/plugins/server/PublicationOptimizer.js +14 -0
  120. package/dist/plugins/server/plugins/server/PublicationOptimizer.js.map +1 -0
  121. package/dist/plugins/server/plugins/server/SslPlugin.d.ts +1 -0
  122. package/dist/plugins/server/plugins/server/SslPlugin.js +86 -0
  123. package/dist/plugins/server/plugins/server/SslPlugin.js.map +1 -0
  124. package/dist/plugins/server/plugins/server/StaticPlugin.d.ts +8 -0
  125. package/dist/plugins/server/plugins/server/StaticPlugin.js +45 -0
  126. package/dist/plugins/server/plugins/server/StaticPlugin.js.map +1 -0
  127. package/dist/plugins/server/server/config.d.ts +59 -0
  128. package/dist/plugins/server/server/config.js +181 -0
  129. package/dist/plugins/server/server/config.js.map +1 -0
  130. package/dist/plugins/server/server/connectors/FsHosting.d.ts +14 -0
  131. package/dist/plugins/server/server/connectors/FsHosting.js +66 -0
  132. package/dist/plugins/server/server/connectors/FsHosting.js.map +1 -0
  133. package/dist/plugins/server/server/connectors/FsStorage.d.ts +44 -0
  134. package/dist/plugins/server/server/connectors/FsStorage.js +261 -0
  135. package/dist/plugins/server/server/connectors/FsStorage.js.map +1 -0
  136. package/dist/plugins/server/server/connectors/connectors.d.ts +86 -0
  137. package/dist/plugins/server/server/connectors/connectors.js +126 -0
  138. package/dist/plugins/server/server/connectors/connectors.js.map +1 -0
  139. package/dist/plugins/server/server/events.d.ts +26 -0
  140. package/dist/plugins/server/server/events.js +31 -0
  141. package/dist/plugins/server/server/events.js.map +1 -0
  142. package/dist/plugins/server/server/jobs.d.ts +12 -0
  143. package/dist/plugins/server/server/jobs.js +79 -0
  144. package/dist/plugins/server/server/jobs.js.map +1 -0
  145. package/dist/plugins/server/server/utils/validation.d.ts +7 -0
  146. package/dist/plugins/server/server/utils/validation.js +37 -0
  147. package/dist/plugins/server/server/utils/validation.js.map +1 -0
  148. package/dist/plugins/server/types.d.ts +339 -0
  149. package/dist/plugins/server/types.js +84 -0
  150. package/dist/plugins/server/types.js.map +1 -0
  151. package/dist/server/constants.js +55 -0
  152. package/dist/server/plugins/server/Cache.js +19 -0
  153. package/dist/server/server/api/api.js +20 -0
  154. package/dist/server/server/api/connectorApi.js +334 -0
  155. package/dist/server/server/api/publicationApi.js +106 -0
  156. package/dist/server/server/api/websiteApi.js +315 -0
  157. package/dist/server/server/cli.js +71 -0
  158. package/dist/server/server/config.js +120 -0
  159. package/dist/server/server/connectors/FsHosting.js +47 -0
  160. package/dist/server/server/connectors/FsStorage.js +228 -0
  161. package/dist/server/server/connectors/connectors.js +88 -0
  162. package/dist/server/server/events.js +14 -0
  163. package/dist/server/server/expose.js +27 -0
  164. package/dist/server/server/express.js +46 -0
  165. package/dist/server/server/index.js +92 -0
  166. package/dist/server/server/jobs.js +50 -0
  167. package/dist/server/server/utils/validation.js +14 -0
  168. package/dist/server/types.js +40 -0
  169. package/package.json +99 -49
  170. package/public/assets/download.png +0 -0
  171. package/public/assets/favicon.ico +0 -0
  172. package/public/assets/favicon.png +0 -0
  173. package/public/assets/ftp.png +0 -0
  174. package/public/assets/gitlab.png +0 -0
  175. package/public/assets/gitlab2.png +0 -0
  176. package/public/assets/laptop.png +0 -0
  177. package/public/assets/logo-silex-small.png +0 -0
  178. package/public/silex.js +22 -23
  179. package/src/css/_variables.scss +24 -20
  180. package/src/css/dialog.scss +35 -2
  181. package/src/css/fonts.scss +31 -0
  182. package/src/css/footer.scss +12 -0
  183. package/src/css/grapesjs-light.scss +180 -0
  184. package/src/css/grapesjs-plugins.scss +227 -0
  185. package/src/css/grapesjs.scss +159 -1
  186. package/src/css/index.scss +12 -1
  187. package/src/css/light.scss +7 -0
  188. package/src/css/loader.scss +2 -0
  189. package/src/css/project-bar.scss +32 -16
  190. package/src/css/silex.scss +79 -5
  191. package/src/css/website-info.scss +14 -0
  192. package/src/html/index.pug +3 -3
  193. package/src/html/templates/includes.pug +0 -1
  194. package/src/ts/client/api.ts +156 -0
  195. package/src/ts/client/assetUrl.test.ts +164 -0
  196. package/src/ts/client/assetUrl.ts +254 -0
  197. package/src/ts/client/config.ts +175 -13
  198. package/src/ts/client/events.ts +43 -0
  199. package/src/ts/client/expose.ts +27 -1
  200. package/src/ts/client/grapesjs/LoginDialog.ts +204 -0
  201. package/src/ts/client/grapesjs/PublicationManager.ts +433 -0
  202. package/src/ts/client/grapesjs/PublicationUi.ts +366 -0
  203. package/src/ts/client/grapesjs/blocks.ts +17 -0
  204. package/src/ts/client/grapesjs/breadcrumbs.ts +79 -0
  205. package/src/ts/client/grapesjs/css-props.ts +910 -0
  206. package/src/ts/client/grapesjs/eleventy.ts +30 -7
  207. package/src/ts/client/grapesjs/footer.ts +42 -0
  208. package/src/ts/client/grapesjs/img.ts +147 -0
  209. package/src/ts/client/grapesjs/index.ts +311 -122
  210. package/src/ts/client/grapesjs/internal-links.test.ts +19 -1
  211. package/src/ts/client/grapesjs/internal-links.ts +31 -7
  212. package/src/ts/client/grapesjs/keymaps.ts +207 -0
  213. package/src/ts/client/grapesjs/new-page-dialog.ts +19 -3
  214. package/src/ts/client/grapesjs/openImport.ts +22 -0
  215. package/src/ts/client/grapesjs/page-panel.ts +109 -7
  216. package/src/ts/client/grapesjs/project-bar.ts +133 -72
  217. package/src/ts/client/grapesjs/resize-panel.ts +20 -0
  218. package/src/ts/client/grapesjs/rich-text.ts +38 -13
  219. package/src/ts/client/grapesjs/semantic.ts +20 -3
  220. package/src/ts/client/grapesjs/settings-sections.ts +117 -0
  221. package/src/ts/client/grapesjs/settings.ts +191 -96
  222. package/src/ts/client/grapesjs/storage.ts +187 -0
  223. package/src/ts/client/grapesjs/symbolDialogs.ts +21 -5
  224. package/src/ts/client/grapesjs/view-buttons.ts +42 -0
  225. package/src/ts/client/index.ts +80 -21
  226. package/src/ts/client/publication-transformers.test.ts +207 -0
  227. package/src/ts/client/publication-transformers.ts +280 -0
  228. package/src/ts/client/publish-custom-code-block.ts +31 -0
  229. package/src/ts/client/publish-fonts.ts +36 -0
  230. package/src/ts/client/utils.ts +70 -1
  231. package/src/ts/constants.ts +78 -0
  232. package/src/ts/externs.ts +17 -0
  233. package/src/ts/page.ts +20 -3
  234. package/src/ts/plugins/client/template.ts +246 -0
  235. package/src/ts/plugins/client/website-info.ts +84 -0
  236. package/src/ts/plugins/server/Cache.ts +32 -0
  237. package/src/ts/plugins/server/DownloadConnector.ts +146 -0
  238. package/src/ts/plugins/server/FtpConnector.test.ts +82 -0
  239. package/src/ts/plugins/server/FtpConnector.ts +621 -0
  240. package/src/ts/plugins/server/GitlabConnector.ts +749 -0
  241. package/src/ts/plugins/server/GitlabHostingConnector.ts +215 -0
  242. package/src/ts/plugins/server/PublicationOptimizer.ts +14 -0
  243. package/src/ts/plugins/server/SslPlugin.ts +84 -0
  244. package/src/ts/plugins/server/StaticPlugin.ts +45 -0
  245. package/src/ts/server/api/api.ts +19 -0
  246. package/src/ts/server/api/connectorApi.ts +464 -0
  247. package/src/ts/server/api/publicationApi.ts +159 -0
  248. package/src/ts/server/api/websiteApi.ts +462 -0
  249. package/src/ts/server/cli.ts +48 -14
  250. package/src/ts/server/config.ts +158 -60
  251. package/src/ts/server/connectors/FsHosting.ts +66 -0
  252. package/src/ts/server/connectors/FsStorage.test.ts +51 -0
  253. package/src/ts/server/connectors/FsStorage.ts +290 -0
  254. package/src/ts/server/connectors/connectors.ts +203 -0
  255. package/src/ts/server/events.ts +37 -0
  256. package/src/ts/server/expose.ts +19 -0
  257. package/src/ts/server/express.ts +57 -5
  258. package/src/ts/server/index.ts +80 -19
  259. package/src/ts/server/jobs.test.ts +75 -0
  260. package/src/ts/server/jobs.ts +89 -0
  261. package/src/ts/server/utils/BackwardCompat.ts +546 -528
  262. package/src/ts/server/utils/validation.ts +34 -0
  263. package/src/ts/types.ts +295 -85
  264. package/.dockerignore +0 -5
  265. package/.editorconfig +0 -14
  266. package/.eslintrc.json +0 -43
  267. package/.github/FUNDING.yml +0 -13
  268. package/.github/workflows/docker-hub-publish.yml +0 -36
  269. package/.github/workflows/npm-publish.yml +0 -19
  270. package/.github/workflows/test.yml +0 -26
  271. package/.nvmrc +0 -1
  272. package/.silex/default/.silex.data.json +0 -1
  273. package/CODE_OF_CONDUCT.md +0 -128
  274. package/CONTRIBUTING.md +0 -131
  275. package/Dockerfile +0 -15
  276. package/directus.silex.js +0 -7
  277. package/dist/constants.js +0 -4
  278. package/dist/events.js +0 -5
  279. package/dist/page.js +0 -15
  280. package/dist/server/cli.js +0 -43
  281. package/dist/server/config.js +0 -70
  282. package/dist/server/express.js +0 -18
  283. package/dist/server/index.js +0 -58
  284. package/dist/types.js +0 -34
  285. package/jest.config.js +0 -10
  286. package/logos/logo_by_ceubri/silex-icon-2018@200px.png +0 -0
  287. package/logos/logo_by_ceubri/silex-icon-2018@4x.png +0 -0
  288. package/logos/logo_by_ceubri/silex-logo-2018-white-transp.pdf +0 -0
  289. package/logos/logo_by_ceubri/silex-logo-2018-white.jpg +0 -0
  290. package/logos/logo_by_ceubri/silex-logo-2018-white.pdf +0 -0
  291. package/logos/logo_by_ceubri/silex-logo-2018-white.png +0 -0
  292. package/logos/logo_by_ceubri/silex-logo-2018-white@0.5x.png +0 -0
  293. package/logos/logo_by_ceubri/silex-logo-2018-white@0.75x.png +0 -0
  294. package/logos/logo_by_ceubri/silex-logo-2018-white@4x.jpg +0 -0
  295. package/logos/logo_by_ceubri/silex-logo-2018-white@4x.png +0 -0
  296. package/logos/logo_by_ceubri/silex-logo-2018.ai +5 -2521
  297. package/logos/logo_by_ceubri/silex-logo-2018.jpg +0 -0
  298. package/logos/logo_by_ceubri/silex-logo-2018.pdf +0 -0
  299. package/logos/logo_by_ceubri/silex-logo-2018.png +0 -0
  300. package/logos/logo_by_ceubri/silex-logo-2018@0.5x.png +0 -0
  301. package/logos/logo_by_ceubri/silex-logo-2018@0.75x.png +0 -0
  302. package/logos/logo_by_ceubri/silex-logo-2018@4x.jpg +0 -0
  303. package/logos/logo_by_ceubri/silex-logo-2018@4x.png +0 -0
  304. package/logos/silexlabs.png +0 -0
  305. package/src/example-client-config.js +0 -47
  306. package/src/plugins/AuthPlugin.js +0 -21
  307. package/src/plugins/Cache.js +0 -11
  308. package/src/plugins/DefaultBackend.js +0 -149
  309. package/src/plugins/ExpressPlugin.js +0 -39
  310. package/src/plugins/HooksPlugin.js +0 -58
  311. package/src/plugins/PublishPlugin.js +0 -69
  312. package/src/plugins/SslPlugin.js +0 -66
  313. package/src/plugins/StaticPlugin.js +0 -48
  314. package/src/plugins/WebsitePlugin.js +0 -207
  315. package/src/ts/client/grapesjs/publish.ts +0 -386
  316. package/src/ts/client/grapesjs/template.ts +0 -166
  317. package/src/ts/events.ts +0 -2
  318. package/tsconfig-server-debug.json +0 -19
  319. package/tsconfig-server-release.json +0 -19
  320. package/tsconfig.jest.json +0 -9
  321. package/tsconfig.json +0 -26
  322. package/webpack.config.js +0 -28
  323. package/webpack.debug.config.js +0 -8
@@ -0,0 +1,334 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
4
+ const express_1 = require("express");
5
+ const constants_1 = require("../../constants");
6
+ const validation_1 = require("../utils/validation");
7
+ const connectors_1 = require("../connectors/connectors");
8
+ function default_1(config) {
9
+ const router = (0, express_1.Router)();
10
+ router.get(constants_1.API_CONNECTOR_USER, routeUser);
11
+ router.get(constants_1.API_CONNECTOR_LIST, routeListConnectors);
12
+ router.get(constants_1.API_CONNECTOR_LOGIN, routeLogin);
13
+ router.post(constants_1.API_CONNECTOR_LOGIN_CALLBACK, routeLoginSuccess);
14
+ router.get(constants_1.API_CONNECTOR_LOGIN_CALLBACK, routeLoginSuccess);
15
+ router.post(constants_1.API_CONNECTOR_LOGOUT, routeLogout);
16
+ return router;
17
+ }
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
+ }
29
+ async function routeUser(req, res) {
30
+ try {
31
+ const config = (0, validation_1.requiredParam)(req.app.get('config'), 'Config object on express js APP');
32
+ const session = (0, validation_1.requiredParam)(req['session'], 'Session object');
33
+ const query = req.query;
34
+ const type = (0, connectors_1.toConnectorEnum)((0, validation_1.requiredParam)(query.type, 'Connector type'));
35
+ const connector = await (0, connectors_1.getConnector)(config, session, type, query.connectorId);
36
+ if (!connector) {
37
+ res
38
+ .status(500)
39
+ .json({
40
+ error: true,
41
+ message: `Connector not found: ${type} ${query.connectorId}`,
42
+ });
43
+ return;
44
+ }
45
+ if (!await connector.isLoggedIn(session)) {
46
+ res
47
+ .status(401)
48
+ .json({
49
+ error: true,
50
+ message: 'Not logged in',
51
+ });
52
+ return;
53
+ }
54
+ const user = await connector.getUser(session);
55
+ res.json(user);
56
+ }
57
+ catch (error) {
58
+ console.error('Error in the user request', error, error.code);
59
+ res.status(validateStatus(error.code ?? error.httpStatusCode, 500)).json({
60
+ error: true,
61
+ message: error.message,
62
+ });
63
+ }
64
+ }
65
+ async function routeListConnectors(req, res) {
66
+ try {
67
+ const config = (0, validation_1.requiredParam)(req.app.get('config'), 'Config object on express js APP');
68
+ const session = (0, validation_1.requiredParam)(req['session'], 'Session object');
69
+ const query = req.query;
70
+ const type = (0, connectors_1.toConnectorEnum)((0, validation_1.requiredParam)(query.type, 'Connector type'));
71
+ const connectors = config.getConnectors(type);
72
+ try {
73
+ const list = await Promise.all(connectors.map(async (connector) => (0, connectors_1.toConnectorData)(session, connector)));
74
+ res.json(list);
75
+ }
76
+ catch (error) {
77
+ console.error('Error while listing connectors', error);
78
+ res.status(validateStatus(error?.code ?? error?.httpStatusCode, 500)).json({
79
+ error: true,
80
+ message: 'Error while listing connectors: ' + error.message,
81
+ });
82
+ }
83
+ }
84
+ catch (error) {
85
+ console.error('Error in the list connectors request', error);
86
+ res.status(validateStatus(error?.code ?? error?.httpStatusCode, 400)).json({
87
+ error: true,
88
+ message: 'Error in the list connectors request: ' + error.message,
89
+ });
90
+ }
91
+ }
92
+ async function routeLogin(req, res) {
93
+ try {
94
+ const query = req.query;
95
+ const connectorId = (0, validation_1.requiredParam)(query.connectorId, 'Connector id');
96
+ const config = (0, validation_1.requiredParam)(req.app.get('config'), 'Config object on express js APP');
97
+ const type = (0, connectors_1.toConnectorEnum)((0, validation_1.requiredParam)(query.type, 'Connector type'));
98
+ const connector = await (0, connectors_1.getConnector)(config, req['session'], type, connectorId);
99
+ const session = (0, validation_1.requiredParam)(req['session'], 'Session object');
100
+ if (!connector)
101
+ throw new Error(`Connector not found ${connectorId} ${type}`);
102
+ if (await connector.isLoggedIn(session)) {
103
+ res.redirect(`${config.url}${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_LOGIN_CALLBACK}?connectorId=${connectorId}&type=${type}`);
104
+ return;
105
+ }
106
+ const oauthUrl = await connector.getOAuthUrl(session);
107
+ if (oauthUrl) {
108
+ res.redirect(oauthUrl);
109
+ }
110
+ else {
111
+ const redirectTo = await connector.getSettingsForm(session, '') ?
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}`;
114
+ res.send(await connector.getLoginForm(session, redirectTo));
115
+ }
116
+ }
117
+ catch (error) {
118
+ console.error('Error in the login request', error);
119
+ res.status(validateStatus(error?.code ?? error?.httpStatusCode, 400)).json({
120
+ error: true,
121
+ message: 'Error in the login request: ' + error.message,
122
+ });
123
+ }
124
+ }
125
+ async function routeLoginSuccess(req, res) {
126
+ try {
127
+ const query = req.query;
128
+ if (query.error)
129
+ throw new Error(query.error);
130
+ const body = req.body;
131
+ const session = (0, validation_1.requiredParam)(req['session'], 'Session object');
132
+ const connectorId = (0, validation_1.requiredParam)(query.connectorId, 'Connector id');
133
+ const config = (0, validation_1.requiredParam)(req.app.get('config'), 'Config object on express js APP');
134
+ const type = (0, connectors_1.toConnectorEnum)((0, validation_1.requiredParam)(query.type, 'Connector type'));
135
+ const connector = await (0, connectors_1.getConnector)(config, req['session'], type, connectorId);
136
+ if (!connector)
137
+ throw new Error('Connector not found ' + connectorId);
138
+ if (await connector.isLoggedIn(session)) {
139
+ console.info('User already logged in for connector ' + connectorId);
140
+ }
141
+ else {
142
+ await connector.setToken(session, {
143
+ ...query,
144
+ ...body,
145
+ });
146
+ }
147
+ res.send(getEndAuthHtml('Logged in', false, connectorId, type, connector.getOptions(body)));
148
+ }
149
+ catch (error) {
150
+ res
151
+ .status(validateStatus(error?.code ?? error?.httpStatusCode, 500))
152
+ .send(getEndAuthHtml(error.message, true, req.query.connectorId, req.query.type));
153
+ }
154
+ }
155
+ async function routeLogout(req, res) {
156
+ try {
157
+ const query = req.query;
158
+ const session = (0, validation_1.requiredParam)(req['session'], 'Session object');
159
+ const config = (0, validation_1.requiredParam)(req.app.get('config'), 'Config object on express js APP');
160
+ const type = (0, connectors_1.toConnectorEnum)((0, validation_1.requiredParam)(query.type, 'Connector type'));
161
+ const connectorId = query.connectorId;
162
+ const connector = await (0, connectors_1.getConnector)(config, session, type, connectorId);
163
+ if (!connector)
164
+ throw new Error(`Connector not found ${connectorId} ${type}`);
165
+ try {
166
+ await connector.logout(session);
167
+ res.json({
168
+ error: false,
169
+ message: 'OK',
170
+ });
171
+ }
172
+ catch (error) {
173
+ console.error('Error while logging out', error);
174
+ res.status(validateStatus(error?.code ?? error?.httpStatusCode, 500)).json({
175
+ error: true,
176
+ message: 'Error while logging out: ' + error.message,
177
+ });
178
+ return;
179
+ }
180
+ }
181
+ catch (error) {
182
+ console.error('Error in the logout request', error);
183
+ res.status(validateStatus(error?.code ?? error?.httpStatusCode, 400)).json({
184
+ error: true,
185
+ message: 'Error in the logout request: ' + error.message,
186
+ });
187
+ return;
188
+ }
189
+ }
190
+ function getEndAuthHtml(message, error, connectorId, connectorType, options) {
191
+ const data = {
192
+ type: 'login',
193
+ error,
194
+ message,
195
+ connectorId,
196
+ connectorType,
197
+ options,
198
+ };
199
+ const status = error ? 'Error' : 'Success';
200
+ return `
201
+ <!DOCTYPE html><html lang="en">
202
+ <head>
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;
268
+ }
269
+
270
+ </style>
271
+ </head>
272
+ <body>
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>
331
+ </body>
332
+ </html>
333
+ `;
334
+ }
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PublicationError = void 0;
4
+ exports.getHostingConnector = getHostingConnector;
5
+ exports.getStorageConnector = getStorageConnector;
6
+ exports.default = default_1;
7
+ const express_1 = require("express");
8
+ const constants_1 = require("../../constants");
9
+ const types_1 = require("../../types");
10
+ const connectors_1 = require("../connectors/connectors");
11
+ const validation_1 = require("../utils/validation");
12
+ const events_1 = require("../events");
13
+ const jobs_1 = require("../jobs");
14
+ class PublicationError extends Error {
15
+ code;
16
+ constructor(message, code) {
17
+ super(message);
18
+ this.code = code;
19
+ }
20
+ }
21
+ exports.PublicationError = PublicationError;
22
+ const PROJECT_ROOT = require.main ? require.main.path : process.cwd();
23
+ async function getHostingConnector(session, config, connectorId) {
24
+ const hostingConnector = await (0, connectors_1.getConnector)(config, session, types_1.ConnectorType.HOSTING, connectorId);
25
+ if (!hostingConnector) {
26
+ throw new PublicationError('No hosting connector found', 500);
27
+ }
28
+ if (!await hostingConnector.isLoggedIn(session)) {
29
+ throw new PublicationError('Not logged in', 401);
30
+ }
31
+ return hostingConnector;
32
+ }
33
+ async function getStorageConnector(session, config, connectorId) {
34
+ const storageConnector = await (0, connectors_1.getConnector)(config, session, types_1.ConnectorType.STORAGE, connectorId);
35
+ if (!storageConnector) {
36
+ throw new PublicationError('No storage connector found', 500);
37
+ }
38
+ if (!await storageConnector.isLoggedIn(session)) {
39
+ throw new PublicationError('Not logged in to the storage connector', 401);
40
+ }
41
+ return storageConnector;
42
+ }
43
+ function default_1(config) {
44
+ const router = (0, express_1.Router)();
45
+ router.get(constants_1.API_PUBLICATION_STATUS, async function (req, res) {
46
+ const query = req.query;
47
+ const jobId = query.jobId;
48
+ const job = jobId && (0, jobs_1.getJob)(jobId);
49
+ if (!job) {
50
+ console.error(`Error: job not found with id ${jobId}`);
51
+ res.status(404).json({
52
+ message: 'Error: job not found.',
53
+ });
54
+ return;
55
+ }
56
+ res.json({
57
+ ...job,
58
+ _timeout: undefined,
59
+ });
60
+ });
61
+ router.post(constants_1.API_PUBLICATION_PUBLISH, async function (req, res) {
62
+ try {
63
+ const query = req.query;
64
+ const body = req.body;
65
+ const websiteId = (0, validation_1.requiredParam)(query.websiteId, 'id in query');
66
+ const storageId = (0, validation_1.requiredParam)(query.storageId, 'storageId in query');
67
+ const hostingId = (0, validation_1.requiredParam)(query.hostingId, 'hostingId in query');
68
+ const session = (0, validation_1.requiredParam)(req['session'], 'session on express request');
69
+ const data = body;
70
+ const { files } = data;
71
+ if (!files) {
72
+ throw new PublicationError('Missing files in body', 400);
73
+ }
74
+ config.emit(events_1.ServerEvent.PUBLISH_START, data);
75
+ const hostingConnector = await getHostingConnector(session, config, hostingId);
76
+ const storage = await getStorageConnector(session, config, storageId);
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
+ return {
84
+ path: file.permalink ?? file.path,
85
+ content: fileWithContent.content ?? await storage.readAsset(session, websiteId, fileWithSrc.src),
86
+ };
87
+ }));
88
+ res.json({
89
+ url: await hostingConnector.getUrl(session, websiteId),
90
+ job: await hostingConnector.publish(session, websiteId, filesList, jobs_1.jobManager),
91
+ });
92
+ }
93
+ catch (err) {
94
+ console.error('Error publishing the website', err);
95
+ res
96
+ .status(typeof err.code === 'number' ? err.code : 500)
97
+ .json({
98
+ message: `Error publishing the website. ${err.message}`
99
+ });
100
+ config.emit(events_1.ServerEvent.PUBLISH_END, err);
101
+ return;
102
+ }
103
+ config.emit(events_1.ServerEvent.PUBLISH_END);
104
+ });
105
+ return router;
106
+ }