@silexlabs/silex 3.0.0-alpha.100

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 (282) hide show
  1. package/.env.default +19 -0
  2. package/.silex.js +37 -0
  3. package/LICENSE +661 -0
  4. package/README.md +96 -0
  5. package/dist/client/client/api.d.ts +85 -0
  6. package/dist/client/client/assetUrl.d.ts +51 -0
  7. package/dist/client/client/config.d.ts +58 -0
  8. package/dist/client/client/events.d.ts +14 -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 +72 -0
  12. package/dist/client/client/grapesjs/PublicationUi.d.ts +62 -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/footer.d.ts +2 -0
  16. package/dist/client/client/grapesjs/index.d.ts +5 -0
  17. package/dist/client/client/grapesjs/internal-links.d.ts +1 -0
  18. package/dist/client/client/grapesjs/new-page-dialog.d.ts +2 -0
  19. package/dist/client/client/grapesjs/openImport.d.ts +9 -0
  20. package/dist/client/client/grapesjs/page-panel.d.ts +3 -0
  21. package/dist/client/client/grapesjs/project-bar.d.ts +1 -0
  22. package/dist/client/client/grapesjs/rich-text.d.ts +1 -0
  23. package/dist/client/client/grapesjs/semantic.d.ts +1 -0
  24. package/dist/client/client/grapesjs/settings.d.ts +2 -0
  25. package/dist/client/client/grapesjs/storage.d.ts +1 -0
  26. package/dist/client/client/grapesjs/symbolDialogs.d.ts +3 -0
  27. package/dist/client/client/index.d.ts +5 -0
  28. package/dist/client/client/publication-transformers.d.ts +41 -0
  29. package/dist/client/client/utils.d.ts +2 -0
  30. package/dist/client/constants.d.ts +29 -0
  31. package/dist/client/css/admin.css +4491 -0
  32. package/dist/client/index.html +9 -0
  33. package/dist/client/js/main.js +321 -0
  34. package/dist/client/js/main.js.LICENSE.txt +24 -0
  35. package/dist/client/page.d.ts +2 -0
  36. package/dist/client/types.d.ts +334 -0
  37. package/dist/plugins/client/client/api.d.ts +85 -0
  38. package/dist/plugins/client/client/api.js +114 -0
  39. package/dist/plugins/client/client/api.js.map +1 -0
  40. package/dist/plugins/client/client/assetUrl.d.ts +51 -0
  41. package/dist/plugins/client/client/assetUrl.js +224 -0
  42. package/dist/plugins/client/client/assetUrl.js.map +1 -0
  43. package/dist/plugins/client/client/config.d.ts +58 -0
  44. package/dist/plugins/client/client/config.js +90 -0
  45. package/dist/plugins/client/client/config.js.map +1 -0
  46. package/dist/plugins/client/client/events.d.ts +14 -0
  47. package/dist/plugins/client/client/events.js +34 -0
  48. package/dist/plugins/client/client/events.js.map +1 -0
  49. package/dist/plugins/client/client/grapesjs/LoginDialog.d.ts +15 -0
  50. package/dist/plugins/client/client/grapesjs/LoginDialog.js +195 -0
  51. package/dist/plugins/client/client/grapesjs/LoginDialog.js.map +1 -0
  52. package/dist/plugins/client/client/grapesjs/PublicationManager.d.ts +72 -0
  53. package/dist/plugins/client/client/grapesjs/PublicationManager.js +356 -0
  54. package/dist/plugins/client/client/grapesjs/PublicationManager.js.map +1 -0
  55. package/dist/plugins/client/client/grapesjs/PublicationUi.d.ts +62 -0
  56. package/dist/plugins/client/client/grapesjs/PublicationUi.js +336 -0
  57. package/dist/plugins/client/client/grapesjs/PublicationUi.js.map +1 -0
  58. package/dist/plugins/client/client/grapesjs/blocks.d.ts +1 -0
  59. package/dist/plugins/client/client/grapesjs/blocks.js +37 -0
  60. package/dist/plugins/client/client/grapesjs/blocks.js.map +1 -0
  61. package/dist/plugins/client/client/grapesjs/breadcrumbs.d.ts +1 -0
  62. package/dist/plugins/client/client/grapesjs/breadcrumbs.js +75 -0
  63. package/dist/plugins/client/client/grapesjs/breadcrumbs.js.map +1 -0
  64. package/dist/plugins/client/client/grapesjs/footer.d.ts +2 -0
  65. package/dist/plugins/client/client/grapesjs/footer.js +28 -0
  66. package/dist/plugins/client/client/grapesjs/footer.js.map +1 -0
  67. package/dist/plugins/client/client/grapesjs/index.d.ts +5 -0
  68. package/dist/plugins/client/client/grapesjs/index.js +313 -0
  69. package/dist/plugins/client/client/grapesjs/index.js.map +1 -0
  70. package/dist/plugins/client/client/grapesjs/internal-links.d.ts +1 -0
  71. package/dist/plugins/client/client/grapesjs/internal-links.js +219 -0
  72. package/dist/plugins/client/client/grapesjs/internal-links.js.map +1 -0
  73. package/dist/plugins/client/client/grapesjs/new-page-dialog.d.ts +2 -0
  74. package/dist/plugins/client/client/grapesjs/new-page-dialog.js +83 -0
  75. package/dist/plugins/client/client/grapesjs/new-page-dialog.js.map +1 -0
  76. package/dist/plugins/client/client/grapesjs/openImport.d.ts +9 -0
  77. package/dist/plugins/client/client/grapesjs/openImport.js +74 -0
  78. package/dist/plugins/client/client/grapesjs/openImport.js.map +1 -0
  79. package/dist/plugins/client/client/grapesjs/page-panel.d.ts +3 -0
  80. package/dist/plugins/client/client/grapesjs/page-panel.js +113 -0
  81. package/dist/plugins/client/client/grapesjs/page-panel.js.map +1 -0
  82. package/dist/plugins/client/client/grapesjs/project-bar.d.ts +1 -0
  83. package/dist/plugins/client/client/grapesjs/project-bar.js +104 -0
  84. package/dist/plugins/client/client/grapesjs/project-bar.js.map +1 -0
  85. package/dist/plugins/client/client/grapesjs/rich-text.d.ts +1 -0
  86. package/dist/plugins/client/client/grapesjs/rich-text.js +31 -0
  87. package/dist/plugins/client/client/grapesjs/rich-text.js.map +1 -0
  88. package/dist/plugins/client/client/grapesjs/semantic.d.ts +1 -0
  89. package/dist/plugins/client/client/grapesjs/semantic.js +110 -0
  90. package/dist/plugins/client/client/grapesjs/semantic.js.map +1 -0
  91. package/dist/plugins/client/client/grapesjs/settings.d.ts +2 -0
  92. package/dist/plugins/client/client/grapesjs/settings.js +198 -0
  93. package/dist/plugins/client/client/grapesjs/settings.js.map +1 -0
  94. package/dist/plugins/client/client/grapesjs/storage.d.ts +1 -0
  95. package/dist/plugins/client/client/grapesjs/storage.js +126 -0
  96. package/dist/plugins/client/client/grapesjs/storage.js.map +1 -0
  97. package/dist/plugins/client/client/grapesjs/symbolDialogs.d.ts +3 -0
  98. package/dist/plugins/client/client/grapesjs/symbolDialogs.js +36 -0
  99. package/dist/plugins/client/client/grapesjs/symbolDialogs.js.map +1 -0
  100. package/dist/plugins/client/client/publication-transformers.d.ts +41 -0
  101. package/dist/plugins/client/client/publication-transformers.js +238 -0
  102. package/dist/plugins/client/client/publication-transformers.js.map +1 -0
  103. package/dist/plugins/client/client/utils.d.ts +2 -0
  104. package/dist/plugins/client/client/utils.js +25 -0
  105. package/dist/plugins/client/client/utils.js.map +1 -0
  106. package/dist/plugins/client/constants.d.ts +29 -0
  107. package/dist/plugins/client/constants.js +46 -0
  108. package/dist/plugins/client/constants.js.map +1 -0
  109. package/dist/plugins/client/page.d.ts +2 -0
  110. package/dist/plugins/client/page.js +31 -0
  111. package/dist/plugins/client/page.js.map +1 -0
  112. package/dist/plugins/client/plugins/client/11ty.d.ts +17 -0
  113. package/dist/plugins/client/plugins/client/11ty.js +86 -0
  114. package/dist/plugins/client/plugins/client/11ty.js.map +1 -0
  115. package/dist/plugins/client/plugins/client/publicationRenderer.d.ts +2 -0
  116. package/dist/plugins/client/plugins/client/publicationRenderer.js +170 -0
  117. package/dist/plugins/client/plugins/client/publicationRenderer.js.map +1 -0
  118. package/dist/plugins/client/plugins/client/template.d.ts +2 -0
  119. package/dist/plugins/client/plugins/client/template.js +183 -0
  120. package/dist/plugins/client/plugins/client/template.js.map +1 -0
  121. package/dist/plugins/client/plugins/client/website-info.d.ts +1 -0
  122. package/dist/plugins/client/plugins/client/website-info.js +72 -0
  123. package/dist/plugins/client/plugins/client/website-info.js.map +1 -0
  124. package/dist/plugins/client/types.d.ts +334 -0
  125. package/dist/plugins/client/types.js +74 -0
  126. package/dist/plugins/client/types.js.map +1 -0
  127. package/dist/plugins/server/constants.d.ts +29 -0
  128. package/dist/plugins/server/constants.js +49 -0
  129. package/dist/plugins/server/constants.js.map +1 -0
  130. package/dist/plugins/server/plugins/server/AuthPlugin.d.ts +1 -0
  131. package/dist/plugins/server/plugins/server/AuthPlugin.js +40 -0
  132. package/dist/plugins/server/plugins/server/AuthPlugin.js.map +1 -0
  133. package/dist/plugins/server/plugins/server/Cache.d.ts +2 -0
  134. package/dist/plugins/server/plugins/server/Cache.js +32 -0
  135. package/dist/plugins/server/plugins/server/Cache.js.map +1 -0
  136. package/dist/plugins/server/plugins/server/DownloadConnector.d.ts +29 -0
  137. package/dist/plugins/server/plugins/server/DownloadConnector.js +129 -0
  138. package/dist/plugins/server/plugins/server/DownloadConnector.js.map +1 -0
  139. package/dist/plugins/server/plugins/server/FtpConnector.d.ts +86 -0
  140. package/dist/plugins/server/plugins/server/FtpConnector.js +526 -0
  141. package/dist/plugins/server/plugins/server/FtpConnector.js.map +1 -0
  142. package/dist/plugins/server/plugins/server/GitlabConnector.d.ts +87 -0
  143. package/dist/plugins/server/plugins/server/GitlabConnector.js +564 -0
  144. package/dist/plugins/server/plugins/server/GitlabConnector.js.map +1 -0
  145. package/dist/plugins/server/plugins/server/PublicationOptimizer.d.ts +0 -0
  146. package/dist/plugins/server/plugins/server/PublicationOptimizer.js +14 -0
  147. package/dist/plugins/server/plugins/server/PublicationOptimizer.js.map +1 -0
  148. package/dist/plugins/server/plugins/server/SslPlugin.d.ts +1 -0
  149. package/dist/plugins/server/plugins/server/SslPlugin.js +86 -0
  150. package/dist/plugins/server/plugins/server/SslPlugin.js.map +1 -0
  151. package/dist/plugins/server/plugins/server/StaticPlugin.d.ts +1 -0
  152. package/dist/plugins/server/plugins/server/StaticPlugin.js +78 -0
  153. package/dist/plugins/server/plugins/server/StaticPlugin.js.map +1 -0
  154. package/dist/plugins/server/server/config.d.ts +59 -0
  155. package/dist/plugins/server/server/config.js +181 -0
  156. package/dist/plugins/server/server/config.js.map +1 -0
  157. package/dist/plugins/server/server/connectors/FsHosting.d.ts +13 -0
  158. package/dist/plugins/server/server/connectors/FsHosting.js +54 -0
  159. package/dist/plugins/server/server/connectors/FsHosting.js.map +1 -0
  160. package/dist/plugins/server/server/connectors/FsStorage.d.ts +43 -0
  161. package/dist/plugins/server/server/connectors/FsStorage.js +257 -0
  162. package/dist/plugins/server/server/connectors/FsStorage.js.map +1 -0
  163. package/dist/plugins/server/server/connectors/connectors.d.ts +87 -0
  164. package/dist/plugins/server/server/connectors/connectors.js +127 -0
  165. package/dist/plugins/server/server/connectors/connectors.js.map +1 -0
  166. package/dist/plugins/server/server/events.d.ts +26 -0
  167. package/dist/plugins/server/server/events.js +31 -0
  168. package/dist/plugins/server/server/events.js.map +1 -0
  169. package/dist/plugins/server/server/jobs.d.ts +12 -0
  170. package/dist/plugins/server/server/jobs.js +77 -0
  171. package/dist/plugins/server/server/jobs.js.map +1 -0
  172. package/dist/plugins/server/server/utils/validation.d.ts +7 -0
  173. package/dist/plugins/server/server/utils/validation.js +38 -0
  174. package/dist/plugins/server/server/utils/validation.js.map +1 -0
  175. package/dist/plugins/server/types.d.ts +334 -0
  176. package/dist/plugins/server/types.js +78 -0
  177. package/dist/plugins/server/types.js.map +1 -0
  178. package/dist/server/constants.js +29 -0
  179. package/dist/server/plugins/server/Cache.js +15 -0
  180. package/dist/server/server/api/api.js +20 -0
  181. package/dist/server/server/api/connectorApi.js +216 -0
  182. package/dist/server/server/api/publicationApi.js +108 -0
  183. package/dist/server/server/api/websiteApi.js +296 -0
  184. package/dist/server/server/cli.js +68 -0
  185. package/dist/server/server/config.js +120 -0
  186. package/dist/server/server/connectors/FsHosting.js +35 -0
  187. package/dist/server/server/connectors/FsStorage.js +225 -0
  188. package/dist/server/server/connectors/connectors.js +89 -0
  189. package/dist/server/server/events.js +14 -0
  190. package/dist/server/server/expose.js +27 -0
  191. package/dist/server/server/express.js +47 -0
  192. package/dist/server/server/index.js +90 -0
  193. package/dist/server/server/jobs.js +48 -0
  194. package/dist/server/server/utils/validation.js +15 -0
  195. package/dist/server/types.js +34 -0
  196. package/package.json +209 -0
  197. package/public/assets/container.png +0 -0
  198. package/public/assets/favicon.png +0 -0
  199. package/public/assets/logo-silex-small.png +0 -0
  200. package/public/robots.txt +2 -0
  201. package/public/silex.js +24 -0
  202. package/src/css/_mixins.scss +8 -0
  203. package/src/css/_variables.scss +33 -0
  204. package/src/css/dialog.scss +41 -0
  205. package/src/css/footer.scss +12 -0
  206. package/src/css/grapesjs-light.scss +180 -0
  207. package/src/css/grapesjs.scss +152 -0
  208. package/src/css/index.scss +32 -0
  209. package/src/css/light.scss +7 -0
  210. package/src/css/loader.scss +12 -0
  211. package/src/css/page-panel.scss +65 -0
  212. package/src/css/project-bar.scss +102 -0
  213. package/src/css/silex.scss +189 -0
  214. package/src/css/website-info.scss +14 -0
  215. package/src/html/debug.pug +8 -0
  216. package/src/html/index.pug +39 -0
  217. package/src/html/templates/includes.pug +1 -0
  218. package/src/html/templates/workspace.pug +2 -0
  219. package/src/ts/client/api.ts +144 -0
  220. package/src/ts/client/assetUrl.test.ts +125 -0
  221. package/src/ts/client/assetUrl.ts +235 -0
  222. package/src/ts/client/config.ts +105 -0
  223. package/src/ts/client/events.ts +34 -0
  224. package/src/ts/client/expose.ts +30 -0
  225. package/src/ts/client/grapesjs/LoginDialog.ts +204 -0
  226. package/src/ts/client/grapesjs/PublicationManager.ts +370 -0
  227. package/src/ts/client/grapesjs/PublicationUi.ts +342 -0
  228. package/src/ts/client/grapesjs/blocks.ts +37 -0
  229. package/src/ts/client/grapesjs/breadcrumbs.ts +79 -0
  230. package/src/ts/client/grapesjs/eleventy.ts +47 -0
  231. package/src/ts/client/grapesjs/footer.ts +27 -0
  232. package/src/ts/client/grapesjs/index.ts +335 -0
  233. package/src/ts/client/grapesjs/internal-links.test.ts +105 -0
  234. package/src/ts/client/grapesjs/internal-links.ts +225 -0
  235. package/src/ts/client/grapesjs/new-page-dialog.ts +90 -0
  236. package/src/ts/client/grapesjs/openImport.ts +81 -0
  237. package/src/ts/client/grapesjs/page-panel.ts +118 -0
  238. package/src/ts/client/grapesjs/project-bar.ts +107 -0
  239. package/src/ts/client/grapesjs/rich-text.ts +33 -0
  240. package/src/ts/client/grapesjs/semantic.ts +114 -0
  241. package/src/ts/client/grapesjs/settings.ts +208 -0
  242. package/src/ts/client/grapesjs/storage.ts +121 -0
  243. package/src/ts/client/grapesjs/symbolDialogs.ts +38 -0
  244. package/src/ts/client/index.ts +98 -0
  245. package/src/ts/client/publication-transformers.test.ts +199 -0
  246. package/src/ts/client/publication-transformers.ts +263 -0
  247. package/src/ts/client/utils.ts +28 -0
  248. package/src/ts/constants.ts +52 -0
  249. package/src/ts/externs.ts +18 -0
  250. package/src/ts/page.ts +31 -0
  251. package/src/ts/plugins/client/11ty.ts +104 -0
  252. package/src/ts/plugins/client/publicationRenderer.ts +174 -0
  253. package/src/ts/plugins/client/template.ts +192 -0
  254. package/src/ts/plugins/client/website-info.ts +84 -0
  255. package/src/ts/plugins/server/AuthPlugin.ts +38 -0
  256. package/src/ts/plugins/server/Cache.ts +28 -0
  257. package/src/ts/plugins/server/DownloadConnector.ts +148 -0
  258. package/src/ts/plugins/server/FtpConnector.test.ts +82 -0
  259. package/src/ts/plugins/server/FtpConnector.ts +609 -0
  260. package/src/ts/plugins/server/GitlabConnector.ts +644 -0
  261. package/src/ts/plugins/server/PublicationOptimizer.ts +14 -0
  262. package/src/ts/plugins/server/SslPlugin.ts +84 -0
  263. package/src/ts/plugins/server/StaticPlugin.ts +79 -0
  264. package/src/ts/server/api/api.ts +19 -0
  265. package/src/ts/server/api/connectorApi.ts +345 -0
  266. package/src/ts/server/api/publicationApi.ts +159 -0
  267. package/src/ts/server/api/websiteApi.ts +432 -0
  268. package/src/ts/server/cli.ts +65 -0
  269. package/src/ts/server/config.ts +189 -0
  270. package/src/ts/server/connectors/FsHosting.ts +60 -0
  271. package/src/ts/server/connectors/FsStorage.test.ts +51 -0
  272. package/src/ts/server/connectors/FsStorage.ts +261 -0
  273. package/src/ts/server/connectors/connectors.ts +203 -0
  274. package/src/ts/server/events.ts +37 -0
  275. package/src/ts/server/expose.ts +19 -0
  276. package/src/ts/server/express.ts +70 -0
  277. package/src/ts/server/index.ts +100 -0
  278. package/src/ts/server/jobs.test.ts +75 -0
  279. package/src/ts/server/jobs.ts +87 -0
  280. package/src/ts/server/utils/BackwardCompat.ts +552 -0
  281. package/src/ts/server/utils/validation.ts +34 -0
  282. package/src/ts/types.ts +339 -0
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ /*
3
+ * Silex website builder, free/libre no-code tool for makers.
4
+ * Copyright (c) 2023 lexoyo and Silex Labs foundation
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License as published by
8
+ * the Free Software Foundation, either version 3 of the License, or any later version.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ var desc = Object.getOwnPropertyDescriptor(m, k);
21
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
22
+ desc = { enumerable: true, get: function() { return m[k]; } };
23
+ }
24
+ Object.defineProperty(o, k2, desc);
25
+ }) : (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ o[k2] = m[k];
28
+ }));
29
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
30
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
31
+ }) : function(o, v) {
32
+ o["default"] = v;
33
+ });
34
+ var __importStar = (this && this.__importStar) || function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.FsStorage = void 0;
43
+ const promises_1 = __importStar(require("fs/promises"));
44
+ const fs_1 = require("fs");
45
+ const connectors_1 = require("./connectors");
46
+ const path_1 = require("path");
47
+ const types_1 = require("../../types");
48
+ const os_1 = require("os");
49
+ const validation_1 = require("../utils/validation");
50
+ const constants_1 = require("../../constants");
51
+ const stream_1 = require("stream");
52
+ const uuid_1 = require("uuid");
53
+ // Variables needed for jest tests
54
+ if (!globalThis.__dirname) {
55
+ // @ts-ignore
56
+ globalThis.__dirname = (0, path_1.dirname)(process.cwd() + '/src/ts/server/connectors/FsStorage.ts');
57
+ console.info('Redefining __dirname', globalThis.__dirname);
58
+ }
59
+ const USER_ICON = 'data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' height=\'1em\' viewBox=\'0 0 448 512\'%3E%3Cpath d=\'M304 128a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM49.3 464H398.7c-8.9-63.3-63.3-112-129-112H178.3c-65.7 0-120.1 48.7-129 112zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3z\'/%3E%3C/svg%3E';
60
+ const FILE_ICON = 'data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M6%202L6%2022%2018%2022%2018%207%2012%202%206%202Z%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M18%202L12%202%2012%208%2018%208%2018%202Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E';
61
+ class FsStorage {
62
+ connectorId = 'fs-storage';
63
+ displayName = 'File system storage';
64
+ icon = FILE_ICON;
65
+ disableLogout = true;
66
+ options;
67
+ connectorType = types_1.ConnectorType.STORAGE;
68
+ color = '#ffffff';
69
+ background = '#006400';
70
+ constructor(config, opts) {
71
+ this.options = {
72
+ path: (0, path_1.join)(__dirname, '..', '..', '..', '..', 'data'),
73
+ assetsFolder: '/assets',
74
+ ...opts,
75
+ };
76
+ this.initFs();
77
+ }
78
+ async initFs() {
79
+ const stat = await promises_1.default.stat(this.options.path).catch(() => null);
80
+ if (!stat) {
81
+ // create data folder with a default website
82
+ const id = constants_1.DEFAULT_WEBSITE_ID;
83
+ await promises_1.default.mkdir((0, path_1.join)(this.options.path, id, this.options.assetsFolder), { recursive: true });
84
+ await this.setWebsiteMeta({}, id, { name: 'Default website', connectorUserSettings: {} });
85
+ await this.updateWebsite({}, id, types_1.defaultWebsiteData);
86
+ }
87
+ }
88
+ // ********************
89
+ // Job utils methods
90
+ // ********************
91
+ updateStatus(filesStatuses, status, statusCbk) {
92
+ statusCbk && statusCbk({
93
+ message: `<p>Writing files:<ul><li>${filesStatuses.map(({ file, message }) => `${file.path}: ${message}`).join('</li><li>')}</li></ul></p>`,
94
+ status,
95
+ });
96
+ }
97
+ initStatus(files) {
98
+ return files.map(file => ({
99
+ file,
100
+ message: 'Waiting',
101
+ status: types_1.JobStatus.IN_PROGRESS,
102
+ }));
103
+ }
104
+ // ********************
105
+ // Connector interface
106
+ // ********************
107
+ getOptions(formData) {
108
+ return {};
109
+ }
110
+ async getOAuthUrl(session) { return null; }
111
+ async getLoginForm(session, redirectTo) {
112
+ return null;
113
+ }
114
+ async getSettingsForm(session, redirectTo) {
115
+ return null;
116
+ }
117
+ async isLoggedIn(session) {
118
+ return true;
119
+ }
120
+ async setToken(session, query) { }
121
+ async logout(session) { }
122
+ async getUser(session) {
123
+ const { username, } = (0, os_1.userInfo)();
124
+ return {
125
+ name: username,
126
+ picture: USER_ICON,
127
+ storage: await (0, connectors_1.toConnectorData)(session, this),
128
+ };
129
+ }
130
+ async setWebsiteMeta(session, id, data) {
131
+ const websiteId = (0, validation_1.requiredParam)(id, 'website id');
132
+ const content = JSON.stringify(data);
133
+ const path = (0, path_1.join)(this.options.path, id, constants_1.WEBSITE_META_DATA_FILE);
134
+ await promises_1.default.writeFile(path, content);
135
+ }
136
+ async getWebsiteMeta(session, id) {
137
+ const websiteId = (0, validation_1.requiredParam)(id, 'website id');
138
+ // Get stats for website folder
139
+ const fileStat = await (0, promises_1.stat)((0, path_1.join)(this.options.path, websiteId));
140
+ const path = (0, path_1.join)(this.options.path, websiteId, constants_1.WEBSITE_META_DATA_FILE);
141
+ // Get meta file
142
+ const content = await promises_1.default.readFile(path);
143
+ const meta = await JSON.parse(content.toString());
144
+ // Return all meta
145
+ return {
146
+ websiteId,
147
+ name: meta.name,
148
+ imageUrl: meta.imageUrl,
149
+ connectorUserSettings: meta.connectorUserSettings,
150
+ createdAt: fileStat.birthtime,
151
+ updatedAt: fileStat.mtime,
152
+ };
153
+ }
154
+ // ********************
155
+ // Storage interface
156
+ // ********************
157
+ async createWebsite(session, meta) {
158
+ const id = (0, uuid_1.v4)();
159
+ await promises_1.default.mkdir((0, path_1.join)(this.options.path, id, this.options.assetsFolder), { recursive: true });
160
+ await this.setWebsiteMeta(session, id, meta);
161
+ await this.updateWebsite(session, id, types_1.defaultWebsiteData);
162
+ return id;
163
+ }
164
+ async readWebsite(session, websiteId) {
165
+ const id = (0, validation_1.requiredParam)(websiteId, 'website id');
166
+ const path = (0, path_1.join)(this.options.path, id, constants_1.WEBSITE_DATA_FILE);
167
+ const content = await promises_1.default.readFile(path);
168
+ return JSON.parse(content.toString());
169
+ }
170
+ async updateWebsite(session, websiteId, data) {
171
+ const id = (0, validation_1.requiredParam)(websiteId, 'website id');
172
+ const path = (0, path_1.join)(this.options.path, id, constants_1.WEBSITE_DATA_FILE);
173
+ await promises_1.default.writeFile(path, JSON.stringify(data));
174
+ }
175
+ async deleteWebsite(session, websiteId) {
176
+ const id = (0, validation_1.requiredParam)(websiteId, 'website id');
177
+ const path = (0, path_1.join)(this.options.path, id);
178
+ return promises_1.default.rmdir(path, { recursive: true });
179
+ }
180
+ async listWebsites(session) {
181
+ const list = await promises_1.default.readdir(this.options.path);
182
+ return Promise.all(list.map(async (fileName) => {
183
+ const websiteId = fileName;
184
+ return this.getWebsiteMeta(session, websiteId);
185
+ }));
186
+ }
187
+ async getAsset(session, id, path) {
188
+ const fullPath = (0, path_1.join)(this.options.path, id, this.options.assetsFolder, path);
189
+ const content = await promises_1.default.readFile(fullPath);
190
+ return { path, content };
191
+ }
192
+ async writeAssets(session, id, files, statusCbk) {
193
+ return this.write(session, id, files, this.options.assetsFolder, statusCbk);
194
+ }
195
+ async write(session, id, files, assetsFolder, statusCbk) {
196
+ const filesStatuses = this.initStatus(files);
197
+ let error = null;
198
+ for (const fileStatus of filesStatuses) {
199
+ const { file } = fileStatus;
200
+ const path = (0, path_1.join)(this.options.path, id, assetsFolder, file.path);
201
+ if (typeof file.content === 'string' || Buffer.isBuffer(file.content)) {
202
+ fileStatus.message = 'Writing';
203
+ this.updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
204
+ try {
205
+ await promises_1.default.writeFile(path, file.content, 'binary');
206
+ }
207
+ catch (err) {
208
+ fileStatus.message = `Error (${err})`;
209
+ this.updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
210
+ error = err;
211
+ continue;
212
+ }
213
+ fileStatus.message = 'Success';
214
+ this.updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
215
+ }
216
+ else if (file.content instanceof stream_1.Readable) {
217
+ fileStatus.message = 'Writing';
218
+ this.updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
219
+ const writeStream = (0, fs_1.createWriteStream)(path);
220
+ file.content.pipe(writeStream);
221
+ await new Promise((resolve) => {
222
+ writeStream.on('finish', () => {
223
+ fileStatus.message = 'Success';
224
+ this.updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
225
+ resolve(file);
226
+ });
227
+ writeStream.on('error', err => {
228
+ console.error('writeStream error', err);
229
+ fileStatus.message = `Error (${err})`;
230
+ this.updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
231
+ error = err;
232
+ resolve(file);
233
+ });
234
+ });
235
+ }
236
+ else {
237
+ console.error('Invalid file content', typeof file.content);
238
+ throw new Error('Invalid file content: ' + typeof file.content);
239
+ }
240
+ }
241
+ this.updateStatus(filesStatuses, error ? types_1.JobStatus.ERROR : types_1.JobStatus.SUCCESS, statusCbk);
242
+ if (error)
243
+ throw error;
244
+ }
245
+ async deleteAssets(session, id, paths) {
246
+ for (const path of paths) {
247
+ await promises_1.default.unlink((0, path_1.join)(this.options.path, id, path));
248
+ }
249
+ }
250
+ async readAsset(session, websiteId, fileName) {
251
+ const id = (0, validation_1.requiredParam)(websiteId, 'website id');
252
+ const path = (0, path_1.join)(this.options.path, id, this.options.assetsFolder, fileName);
253
+ return await promises_1.default.readFile(path);
254
+ }
255
+ }
256
+ exports.FsStorage = FsStorage;
257
+ //# sourceMappingURL=FsStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FsStorage.js","sourceRoot":"","sources":["../../../../../src/ts/server/connectors/FsStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { Readable } from 'stream';
4
+ import { ServerConfig } from '../config';
5
+ import { JobStatus, JobData, ConnectorData, ConnectorId, WebsiteId, ConnectorType, ConnectorUser, WebsiteMeta, WebsiteMetaFileContent, WebsiteData, ConnectorOptions } from '../../types';
6
+ import { JobManager } from '../jobs';
7
+ /**
8
+ * @fileoverview define types for Silex connectors
9
+ * Bakends can provide storage for website data and assets, and/or hosting to publish the website online
10
+ */
11
+ /**
12
+ * Connector data stored in the website meta file
13
+ */
14
+ export type ConnectorFileContent = string | Buffer | Readable;
15
+ /**
16
+ * Files are stored in connector as a File object
17
+ * @see types/ClientSideFile
18
+ * @see contentToString()
19
+ */
20
+ export interface ConnectorFile {
21
+ path: string;
22
+ content: ConnectorFileContent;
23
+ }
24
+ /**
25
+ * Callback to update the publication status
26
+ */
27
+ export type StatusCallback = ({ message, status }: {
28
+ message: string;
29
+ status: JobStatus;
30
+ }) => Promise<void>;
31
+ export type ConnectorSession = object;
32
+ /**
33
+ * Connectors are the base interface for Storage and Hosting connectors
34
+ */
35
+ export interface Connector<Session extends ConnectorSession = ConnectorSession> {
36
+ connectorId: ConnectorId;
37
+ connectorType: ConnectorType;
38
+ displayName: string;
39
+ icon: string;
40
+ disableLogout?: boolean;
41
+ color: string;
42
+ background: string;
43
+ getOAuthUrl(session: Session): Promise<string | null>;
44
+ getLoginForm(session: Session, redirectTo: string): Promise<string | null>;
45
+ getSettingsForm(session: Session, redirectTo: string): Promise<string | null>;
46
+ isLoggedIn(session: Session): Promise<boolean>;
47
+ setToken(session: Session, token: object): Promise<void>;
48
+ logout(session: Session): Promise<void>;
49
+ getUser(session: Session): Promise<ConnectorUser | null>;
50
+ getOptions(formData: object): ConnectorOptions;
51
+ }
52
+ /**
53
+ * Storage are used to store the website data and assets
54
+ * And possibly rename files and directories, and get the URL of a file
55
+ *
56
+ */
57
+ export interface StorageConnector<Session extends ConnectorSession = ConnectorSession> extends Connector<Session> {
58
+ listWebsites(session: Session): Promise<WebsiteMeta[]>;
59
+ readWebsite(session: Session, websiteId: WebsiteId): Promise<WebsiteData | Readable>;
60
+ createWebsite(session: Session, data: WebsiteMetaFileContent): Promise<WebsiteId>;
61
+ updateWebsite(session: Session, websiteId: WebsiteId, data: WebsiteData): Promise<void>;
62
+ deleteWebsite(session: Session, websiteId: WebsiteId): Promise<void>;
63
+ writeAssets(session: Session, websiteId: WebsiteId, files: ConnectorFile[], status?: StatusCallback): Promise<string[] | void>;
64
+ readAsset(session: Session, websiteId: WebsiteId, fileName: string): Promise<ConnectorFileContent>;
65
+ deleteAssets(session: Session, websiteId: WebsiteId, fileNames: string[]): Promise<void>;
66
+ getWebsiteMeta(session: Session, websiteId: WebsiteId): Promise<WebsiteMeta>;
67
+ setWebsiteMeta(session: Session, websiteId: WebsiteId, data: WebsiteMetaFileContent): Promise<void>;
68
+ }
69
+ /**
70
+ * Hosting connectors are used to publish the website
71
+ */
72
+ export interface HostingConnector<Session extends ConnectorSession = ConnectorSession> extends Connector<Session> {
73
+ publish(session: Session, websiteId: WebsiteId, files: ConnectorFile[], jobManager: JobManager): Promise<JobData>;
74
+ getUrl(session: Session, websiteId: WebsiteId): Promise<string>;
75
+ }
76
+ export declare function toConnectorEnum(type: string | ConnectorType): ConnectorType;
77
+ /**
78
+ * Get a connector by id or by type
79
+ */
80
+ export declare function getConnector<T extends Connector>(config: ServerConfig, session: any, type: ConnectorType, connectorId?: ConnectorId): Promise<T | undefined>;
81
+ /**
82
+ * Convert a connector to a ConnectorData object to be sent to the frontend
83
+ */
84
+ export declare function toConnectorData(session: any, connector: Connector): Promise<ConnectorData>;
85
+ export declare function contentToString(content: ConnectorFileContent): Promise<string>;
86
+ export declare function contentToBuffer(content: ConnectorFileContent): Promise<Buffer>;
87
+ export declare function contentToReadable(content: ConnectorFileContent): Readable;
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ /*
3
+ * Silex website builder, free/libre no-code tool for makers.
4
+ * Copyright (c) 2023 lexoyo and Silex Labs foundation
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License as published by
8
+ * the Free Software Foundation, either version 3 of the License, or any later version.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.contentToReadable = exports.contentToBuffer = exports.contentToString = exports.toConnectorData = exports.getConnector = exports.toConnectorEnum = void 0;
20
+ const stream_1 = require("stream");
21
+ const types_1 = require("../../types");
22
+ function toConnectorEnum(type) {
23
+ const result = types_1.ConnectorType[type.toString().toUpperCase()];
24
+ if (!result)
25
+ throw new Error(`Unknown connector type ${type}. It should be one of ${Object.keys(types_1.ConnectorType).join(', ')}`);
26
+ return result;
27
+ }
28
+ exports.toConnectorEnum = toConnectorEnum;
29
+ /**
30
+ * Get a connector by id or by type
31
+ */
32
+ async function getConnector(config, session, type, connectorId) {
33
+ // Get the connectors for this type
34
+ const connectors = config.getConnectors(type);
35
+ // Find the connector by id
36
+ if (connectorId)
37
+ return connectors.find(s => s.connectorId === connectorId && s.connectorType === type);
38
+ // Find the first logged in connector
39
+ for (const connector of connectors) {
40
+ if (await connector.isLoggedIn(session)) {
41
+ return connector;
42
+ }
43
+ }
44
+ // Defaults to the first connector
45
+ return connectors[0];
46
+ }
47
+ exports.getConnector = getConnector;
48
+ /**
49
+ * Convert a connector to a ConnectorData object to be sent to the frontend
50
+ */
51
+ async function toConnectorData(session, connector) {
52
+ return {
53
+ connectorId: connector.connectorId,
54
+ type: connector.connectorType,
55
+ displayName: connector.displayName,
56
+ icon: connector.icon,
57
+ disableLogout: !!connector.disableLogout,
58
+ isLoggedIn: await connector.isLoggedIn(session),
59
+ oauthUrl: await connector.getOAuthUrl(session),
60
+ color: connector.color,
61
+ background: connector.background,
62
+ };
63
+ }
64
+ exports.toConnectorData = toConnectorData;
65
+ async function contentToString(content) {
66
+ // String
67
+ if (typeof content === 'string')
68
+ return content;
69
+ // Buffer
70
+ if (Buffer.isBuffer(content))
71
+ return content.toString('utf8');
72
+ // Stream
73
+ return new Promise((resolve, reject) => {
74
+ let result = '';
75
+ content.on('data', (chunk) => {
76
+ result += chunk.toString('utf8');
77
+ });
78
+ content.on('error', (err) => {
79
+ reject(err);
80
+ });
81
+ content.on('end', () => {
82
+ resolve(result);
83
+ });
84
+ });
85
+ }
86
+ exports.contentToString = contentToString;
87
+ async function contentToBuffer(content) {
88
+ // String
89
+ if (typeof content === 'string')
90
+ return Buffer.from(content, 'utf8');
91
+ // Buffer
92
+ if (Buffer.isBuffer(content))
93
+ return content;
94
+ // Stream
95
+ if (content instanceof stream_1.Readable) {
96
+ return new Promise((resolve, reject) => {
97
+ const chunks = [];
98
+ content.on('data', (chunk) => {
99
+ chunks.push(chunk);
100
+ });
101
+ content.on('error', (err) => {
102
+ reject(err);
103
+ });
104
+ content.on('end', () => {
105
+ resolve(Buffer.concat(chunks));
106
+ });
107
+ });
108
+ }
109
+ // Unknown
110
+ throw new Error('Unknown content type');
111
+ }
112
+ exports.contentToBuffer = contentToBuffer;
113
+ function contentToReadable(content) {
114
+ // String
115
+ if (typeof content === 'string')
116
+ return stream_1.Readable.from([content]);
117
+ // Buffer
118
+ if (Buffer.isBuffer(content))
119
+ return stream_1.Readable.from([content]);
120
+ // Stream
121
+ if (content instanceof stream_1.Readable)
122
+ return content;
123
+ // Unknown
124
+ throw new Error('Unknown content type');
125
+ }
126
+ exports.contentToReadable = contentToReadable;
127
+ //# sourceMappingURL=connectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectors.js","sourceRoot":"","sources":["../../../../../src/ts/server/connectors/connectors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { ConnectorId, PublicationData, WebsiteData, WebsiteId } from '../types';
2
+ import { ConnectorFile } from './connectors/connectors';
3
+ export declare enum ServerEvent {
4
+ STARTUP_START = "startup-start",
5
+ STARTUP_END = "startup-end",
6
+ PUBLISH_START = "publish-start",
7
+ PUBLISH_END = "publish-end",
8
+ WEBSITE_STORE_START = "store-start",
9
+ WEBSITE_STORE_END = "store-end",
10
+ WEBSITE_ASSET_STORE_START = "asset-store-start",
11
+ WEBSITE_ASSET_STORE_END = "asset-store-end"
12
+ }
13
+ export type PublishStartEventType = PublicationData;
14
+ export type PublishEndEventType = Error | null;
15
+ export type WebsiteStoreStartEventType = {
16
+ websiteId: WebsiteId;
17
+ websiteData: WebsiteData;
18
+ connectorId: ConnectorId;
19
+ };
20
+ export type WebsiteStoreEndEventType = Error | null;
21
+ export type WebsiteAssetStoreStartEventType = {
22
+ files: ConnectorFile[];
23
+ websiteId: WebsiteId;
24
+ connectorId: ConnectorId;
25
+ };
26
+ export type WebsiteAssetStoreEndEventType = Error | null;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /*
3
+ * Silex website builder, free/libre no-code tool for makers.
4
+ * Copyright (c) 2023 lexoyo and Silex Labs foundation
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License as published by
8
+ * the Free Software Foundation, either version 3 of the License, or any later version.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.ServerEvent = void 0;
20
+ var ServerEvent;
21
+ (function (ServerEvent) {
22
+ ServerEvent["STARTUP_START"] = "startup-start";
23
+ ServerEvent["STARTUP_END"] = "startup-end";
24
+ ServerEvent["PUBLISH_START"] = "publish-start";
25
+ ServerEvent["PUBLISH_END"] = "publish-end";
26
+ ServerEvent["WEBSITE_STORE_START"] = "store-start";
27
+ ServerEvent["WEBSITE_STORE_END"] = "store-end";
28
+ ServerEvent["WEBSITE_ASSET_STORE_START"] = "asset-store-start";
29
+ ServerEvent["WEBSITE_ASSET_STORE_END"] = "asset-store-end";
30
+ })(ServerEvent || (exports.ServerEvent = ServerEvent = {}));
31
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/ts/server/events.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAKH,IAAY,WASX;AATD,WAAY,WAAW;IACrB,8CAA+B,CAAA;IAC/B,0CAA2B,CAAA;IAC3B,8CAA+B,CAAA;IAC/B,0CAA2B,CAAA;IAC3B,kDAAmC,CAAA;IACnC,8CAA+B,CAAA;IAC/B,8DAA+C,CAAA;IAC/C,0DAA2C,CAAA;AAC7C,CAAC,EATW,WAAW,2BAAX,WAAW,QAStB"}
@@ -0,0 +1,12 @@
1
+ import { JobData, JobId } from '../types';
2
+ export declare function startJob(message?: string): JobData;
3
+ export declare function getJob(id: JobId): JobData | undefined;
4
+ export declare function jobSuccess(id: JobId, message?: string): boolean;
5
+ export declare function jobError(id: JobId, message?: string): boolean;
6
+ export declare function killJob(job: JobData): void;
7
+ export interface JobManager {
8
+ startJob: typeof startJob;
9
+ jobSuccess: typeof jobSuccess;
10
+ jobError: typeof jobError;
11
+ }
12
+ export declare const jobManager: JobManager;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ /*
3
+ * Silex website builder, free/libre no-code tool for makers.
4
+ * Copyright (c) 2023 lexoyo and Silex Labs foundation
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License as published by
8
+ * the Free Software Foundation, either version 3 of the License, or any later version.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.jobManager = exports.killJob = exports.jobError = exports.jobSuccess = exports.getJob = exports.startJob = void 0;
20
+ const types_1 = require("../types");
21
+ // Delay after which the job is deleted from memory
22
+ const TIME_TO_KEEP_AFTER_STOP = 60 * 10 * 1000; // 10 min
23
+ // Store the jobs in memory
24
+ const jobs = new Array();
25
+ // Key which will change on server restart
26
+ const processKey = Math.ceil(Math.random() * 1000000);
27
+ // Next id for the next job
28
+ let nextJobId = 0;
29
+ // Create a new job
30
+ function startJob(message = '') {
31
+ const jobId = `${processKey}_${++nextJobId}`;
32
+ const job = {
33
+ jobId,
34
+ status: types_1.JobStatus.IN_PROGRESS,
35
+ message: message
36
+ };
37
+ jobs.push(job);
38
+ return job;
39
+ }
40
+ exports.startJob = startJob;
41
+ // Retriev a job if it exists
42
+ function getJob(id) {
43
+ return jobs.find(job => job.jobId === id);
44
+ }
45
+ exports.getJob = getJob;
46
+ // End the job with success
47
+ function jobSuccess(id, message = '') {
48
+ return end(id, types_1.JobStatus.SUCCESS, message);
49
+ }
50
+ exports.jobSuccess = jobSuccess;
51
+ // End the job with error
52
+ function jobError(id, message = '') {
53
+ return end(id, types_1.JobStatus.ERROR, message);
54
+ }
55
+ exports.jobError = jobError;
56
+ // Remove a job from memory
57
+ // This is also used in unit tests to avoid memory lea
58
+ function killJob(job) {
59
+ clearTimeout(job._timeout);
60
+ jobs.splice(jobs.findIndex(j => job.jobId === j.jobId), 1);
61
+ }
62
+ exports.killJob = killJob;
63
+ // End the job
64
+ function end(id, status, message = '') {
65
+ const job = getJob(id);
66
+ if (job) {
67
+ job.status = status;
68
+ if (message)
69
+ job.message = message;
70
+ job._timeout = setTimeout(() => killJob(job), TIME_TO_KEEP_AFTER_STOP);
71
+ return true;
72
+ }
73
+ return false;
74
+ }
75
+ // Export the job manager
76
+ exports.jobManager = { startJob, jobSuccess, jobError };
77
+ //# sourceMappingURL=jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../../src/ts/server/jobs.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,oCAAoD;AAEpD,mDAAmD;AACnD,MAAM,uBAAuB,GAAG,EAAE,GAAC,EAAE,GAAC,IAAI,CAAA,CAAC,SAAS;AAEpD,2BAA2B;AAC3B,MAAM,IAAI,GAAG,IAAI,KAAK,EAAW,CAAA;AAEjC,0CAA0C;AAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAA;AAErD,2BAA2B;AAC3B,IAAI,SAAS,GAAG,CAAC,CAAA;AAEjB,mBAAmB;AACnB,SAAgB,QAAQ,CAAC,OAAO,GAAG,EAAE;IACnC,MAAM,KAAK,GAAG,GAAG,UAAU,IAAI,EAAE,SAAS,EAAE,CAAA;IAC5C,MAAM,GAAG,GAAY;QACnB,KAAK;QACL,MAAM,EAAE,iBAAS,CAAC,WAAW;QAC7B,OAAO,EAAE,OAAO;KACjB,CAAA;IACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACd,OAAO,GAAG,CAAA;AACZ,CAAC;AATD,4BASC;AAED,6BAA6B;AAC7B,SAAgB,MAAM,CAAC,EAAS;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAA;AAC3C,CAAC;AAFD,wBAEC;AAGD,2BAA2B;AAC3B,SAAgB,UAAU,CAAC,EAAS,EAAE,OAAO,GAAG,EAAE;IAChD,OAAO,GAAG,CAAC,EAAE,EAAE,iBAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AAC5C,CAAC;AAFD,gCAEC;AAED,yBAAyB;AACzB,SAAgB,QAAQ,CAAC,EAAS,EAAE,OAAO,GAAG,EAAE;IAC9C,OAAO,GAAG,CAAC,EAAE,EAAE,iBAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC1C,CAAC;AAFD,4BAEC;AAED,2BAA2B;AAC3B,sDAAsD;AACtD,SAAgB,OAAO,CAAC,GAAY;IAClC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;AAC5D,CAAC;AAHD,0BAGC;AAED,cAAc;AACd,SAAS,GAAG,CAAC,EAAS,EAAE,MAAiB,EAAE,OAAO,GAAG,EAAE;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;IACtB,IAAG,GAAG,EAAE;QACN,GAAG,CAAC,MAAM,GAAG,MAAM,CAAA;QACnB,IAAG,OAAO;YAAE,GAAG,CAAC,OAAO,GAAG,OAAO,CAAA;QACjC,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,uBAAuB,CAAC,CAAA;QACtE,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AASD,yBAAyB;AACZ,QAAA,UAAU,GAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA"}