@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.
- package/.env.default +19 -0
- package/.silex.js +37 -0
- package/LICENSE +661 -0
- package/README.md +96 -0
- package/dist/client/client/api.d.ts +85 -0
- package/dist/client/client/assetUrl.d.ts +51 -0
- package/dist/client/client/config.d.ts +58 -0
- package/dist/client/client/events.d.ts +14 -0
- package/dist/client/client/expose.d.ts +8 -0
- package/dist/client/client/grapesjs/LoginDialog.d.ts +15 -0
- package/dist/client/client/grapesjs/PublicationManager.d.ts +72 -0
- package/dist/client/client/grapesjs/PublicationUi.d.ts +62 -0
- package/dist/client/client/grapesjs/blocks.d.ts +1 -0
- package/dist/client/client/grapesjs/breadcrumbs.d.ts +1 -0
- package/dist/client/client/grapesjs/footer.d.ts +2 -0
- package/dist/client/client/grapesjs/index.d.ts +5 -0
- package/dist/client/client/grapesjs/internal-links.d.ts +1 -0
- package/dist/client/client/grapesjs/new-page-dialog.d.ts +2 -0
- package/dist/client/client/grapesjs/openImport.d.ts +9 -0
- package/dist/client/client/grapesjs/page-panel.d.ts +3 -0
- package/dist/client/client/grapesjs/project-bar.d.ts +1 -0
- package/dist/client/client/grapesjs/rich-text.d.ts +1 -0
- package/dist/client/client/grapesjs/semantic.d.ts +1 -0
- package/dist/client/client/grapesjs/settings.d.ts +2 -0
- package/dist/client/client/grapesjs/storage.d.ts +1 -0
- package/dist/client/client/grapesjs/symbolDialogs.d.ts +3 -0
- package/dist/client/client/index.d.ts +5 -0
- package/dist/client/client/publication-transformers.d.ts +41 -0
- package/dist/client/client/utils.d.ts +2 -0
- package/dist/client/constants.d.ts +29 -0
- package/dist/client/css/admin.css +4491 -0
- package/dist/client/index.html +9 -0
- package/dist/client/js/main.js +321 -0
- package/dist/client/js/main.js.LICENSE.txt +24 -0
- package/dist/client/page.d.ts +2 -0
- package/dist/client/types.d.ts +334 -0
- package/dist/plugins/client/client/api.d.ts +85 -0
- package/dist/plugins/client/client/api.js +114 -0
- package/dist/plugins/client/client/api.js.map +1 -0
- package/dist/plugins/client/client/assetUrl.d.ts +51 -0
- package/dist/plugins/client/client/assetUrl.js +224 -0
- package/dist/plugins/client/client/assetUrl.js.map +1 -0
- package/dist/plugins/client/client/config.d.ts +58 -0
- package/dist/plugins/client/client/config.js +90 -0
- package/dist/plugins/client/client/config.js.map +1 -0
- package/dist/plugins/client/client/events.d.ts +14 -0
- package/dist/plugins/client/client/events.js +34 -0
- package/dist/plugins/client/client/events.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/LoginDialog.d.ts +15 -0
- package/dist/plugins/client/client/grapesjs/LoginDialog.js +195 -0
- package/dist/plugins/client/client/grapesjs/LoginDialog.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/PublicationManager.d.ts +72 -0
- package/dist/plugins/client/client/grapesjs/PublicationManager.js +356 -0
- package/dist/plugins/client/client/grapesjs/PublicationManager.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/PublicationUi.d.ts +62 -0
- package/dist/plugins/client/client/grapesjs/PublicationUi.js +336 -0
- package/dist/plugins/client/client/grapesjs/PublicationUi.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/blocks.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/blocks.js +37 -0
- package/dist/plugins/client/client/grapesjs/blocks.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/breadcrumbs.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/breadcrumbs.js +75 -0
- package/dist/plugins/client/client/grapesjs/breadcrumbs.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/footer.d.ts +2 -0
- package/dist/plugins/client/client/grapesjs/footer.js +28 -0
- package/dist/plugins/client/client/grapesjs/footer.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/index.d.ts +5 -0
- package/dist/plugins/client/client/grapesjs/index.js +313 -0
- package/dist/plugins/client/client/grapesjs/index.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/internal-links.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/internal-links.js +219 -0
- package/dist/plugins/client/client/grapesjs/internal-links.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/new-page-dialog.d.ts +2 -0
- package/dist/plugins/client/client/grapesjs/new-page-dialog.js +83 -0
- package/dist/plugins/client/client/grapesjs/new-page-dialog.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/openImport.d.ts +9 -0
- package/dist/plugins/client/client/grapesjs/openImport.js +74 -0
- package/dist/plugins/client/client/grapesjs/openImport.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/page-panel.d.ts +3 -0
- package/dist/plugins/client/client/grapesjs/page-panel.js +113 -0
- package/dist/plugins/client/client/grapesjs/page-panel.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/project-bar.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/project-bar.js +104 -0
- package/dist/plugins/client/client/grapesjs/project-bar.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/rich-text.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/rich-text.js +31 -0
- package/dist/plugins/client/client/grapesjs/rich-text.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/semantic.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/semantic.js +110 -0
- package/dist/plugins/client/client/grapesjs/semantic.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/settings.d.ts +2 -0
- package/dist/plugins/client/client/grapesjs/settings.js +198 -0
- package/dist/plugins/client/client/grapesjs/settings.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/storage.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/storage.js +126 -0
- package/dist/plugins/client/client/grapesjs/storage.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/symbolDialogs.d.ts +3 -0
- package/dist/plugins/client/client/grapesjs/symbolDialogs.js +36 -0
- package/dist/plugins/client/client/grapesjs/symbolDialogs.js.map +1 -0
- package/dist/plugins/client/client/publication-transformers.d.ts +41 -0
- package/dist/plugins/client/client/publication-transformers.js +238 -0
- package/dist/plugins/client/client/publication-transformers.js.map +1 -0
- package/dist/plugins/client/client/utils.d.ts +2 -0
- package/dist/plugins/client/client/utils.js +25 -0
- package/dist/plugins/client/client/utils.js.map +1 -0
- package/dist/plugins/client/constants.d.ts +29 -0
- package/dist/plugins/client/constants.js +46 -0
- package/dist/plugins/client/constants.js.map +1 -0
- package/dist/plugins/client/page.d.ts +2 -0
- package/dist/plugins/client/page.js +31 -0
- package/dist/plugins/client/page.js.map +1 -0
- package/dist/plugins/client/plugins/client/11ty.d.ts +17 -0
- package/dist/plugins/client/plugins/client/11ty.js +86 -0
- package/dist/plugins/client/plugins/client/11ty.js.map +1 -0
- package/dist/plugins/client/plugins/client/publicationRenderer.d.ts +2 -0
- package/dist/plugins/client/plugins/client/publicationRenderer.js +170 -0
- package/dist/plugins/client/plugins/client/publicationRenderer.js.map +1 -0
- package/dist/plugins/client/plugins/client/template.d.ts +2 -0
- package/dist/plugins/client/plugins/client/template.js +183 -0
- package/dist/plugins/client/plugins/client/template.js.map +1 -0
- package/dist/plugins/client/plugins/client/website-info.d.ts +1 -0
- package/dist/plugins/client/plugins/client/website-info.js +72 -0
- package/dist/plugins/client/plugins/client/website-info.js.map +1 -0
- package/dist/plugins/client/types.d.ts +334 -0
- package/dist/plugins/client/types.js +74 -0
- package/dist/plugins/client/types.js.map +1 -0
- package/dist/plugins/server/constants.d.ts +29 -0
- package/dist/plugins/server/constants.js +49 -0
- package/dist/plugins/server/constants.js.map +1 -0
- package/dist/plugins/server/plugins/server/AuthPlugin.d.ts +1 -0
- package/dist/plugins/server/plugins/server/AuthPlugin.js +40 -0
- package/dist/plugins/server/plugins/server/AuthPlugin.js.map +1 -0
- package/dist/plugins/server/plugins/server/Cache.d.ts +2 -0
- package/dist/plugins/server/plugins/server/Cache.js +32 -0
- package/dist/plugins/server/plugins/server/Cache.js.map +1 -0
- package/dist/plugins/server/plugins/server/DownloadConnector.d.ts +29 -0
- package/dist/plugins/server/plugins/server/DownloadConnector.js +129 -0
- package/dist/plugins/server/plugins/server/DownloadConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/FtpConnector.d.ts +86 -0
- package/dist/plugins/server/plugins/server/FtpConnector.js +526 -0
- package/dist/plugins/server/plugins/server/FtpConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/GitlabConnector.d.ts +87 -0
- package/dist/plugins/server/plugins/server/GitlabConnector.js +564 -0
- package/dist/plugins/server/plugins/server/GitlabConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/PublicationOptimizer.d.ts +0 -0
- package/dist/plugins/server/plugins/server/PublicationOptimizer.js +14 -0
- package/dist/plugins/server/plugins/server/PublicationOptimizer.js.map +1 -0
- package/dist/plugins/server/plugins/server/SslPlugin.d.ts +1 -0
- package/dist/plugins/server/plugins/server/SslPlugin.js +86 -0
- package/dist/plugins/server/plugins/server/SslPlugin.js.map +1 -0
- package/dist/plugins/server/plugins/server/StaticPlugin.d.ts +1 -0
- package/dist/plugins/server/plugins/server/StaticPlugin.js +78 -0
- package/dist/plugins/server/plugins/server/StaticPlugin.js.map +1 -0
- package/dist/plugins/server/server/config.d.ts +59 -0
- package/dist/plugins/server/server/config.js +181 -0
- package/dist/plugins/server/server/config.js.map +1 -0
- package/dist/plugins/server/server/connectors/FsHosting.d.ts +13 -0
- package/dist/plugins/server/server/connectors/FsHosting.js +54 -0
- package/dist/plugins/server/server/connectors/FsHosting.js.map +1 -0
- package/dist/plugins/server/server/connectors/FsStorage.d.ts +43 -0
- package/dist/plugins/server/server/connectors/FsStorage.js +257 -0
- package/dist/plugins/server/server/connectors/FsStorage.js.map +1 -0
- package/dist/plugins/server/server/connectors/connectors.d.ts +87 -0
- package/dist/plugins/server/server/connectors/connectors.js +127 -0
- package/dist/plugins/server/server/connectors/connectors.js.map +1 -0
- package/dist/plugins/server/server/events.d.ts +26 -0
- package/dist/plugins/server/server/events.js +31 -0
- package/dist/plugins/server/server/events.js.map +1 -0
- package/dist/plugins/server/server/jobs.d.ts +12 -0
- package/dist/plugins/server/server/jobs.js +77 -0
- package/dist/plugins/server/server/jobs.js.map +1 -0
- package/dist/plugins/server/server/utils/validation.d.ts +7 -0
- package/dist/plugins/server/server/utils/validation.js +38 -0
- package/dist/plugins/server/server/utils/validation.js.map +1 -0
- package/dist/plugins/server/types.d.ts +334 -0
- package/dist/plugins/server/types.js +78 -0
- package/dist/plugins/server/types.js.map +1 -0
- package/dist/server/constants.js +29 -0
- package/dist/server/plugins/server/Cache.js +15 -0
- package/dist/server/server/api/api.js +20 -0
- package/dist/server/server/api/connectorApi.js +216 -0
- package/dist/server/server/api/publicationApi.js +108 -0
- package/dist/server/server/api/websiteApi.js +296 -0
- package/dist/server/server/cli.js +68 -0
- package/dist/server/server/config.js +120 -0
- package/dist/server/server/connectors/FsHosting.js +35 -0
- package/dist/server/server/connectors/FsStorage.js +225 -0
- package/dist/server/server/connectors/connectors.js +89 -0
- package/dist/server/server/events.js +14 -0
- package/dist/server/server/expose.js +27 -0
- package/dist/server/server/express.js +47 -0
- package/dist/server/server/index.js +90 -0
- package/dist/server/server/jobs.js +48 -0
- package/dist/server/server/utils/validation.js +15 -0
- package/dist/server/types.js +34 -0
- package/package.json +209 -0
- package/public/assets/container.png +0 -0
- package/public/assets/favicon.png +0 -0
- package/public/assets/logo-silex-small.png +0 -0
- package/public/robots.txt +2 -0
- package/public/silex.js +24 -0
- package/src/css/_mixins.scss +8 -0
- package/src/css/_variables.scss +33 -0
- package/src/css/dialog.scss +41 -0
- package/src/css/footer.scss +12 -0
- package/src/css/grapesjs-light.scss +180 -0
- package/src/css/grapesjs.scss +152 -0
- package/src/css/index.scss +32 -0
- package/src/css/light.scss +7 -0
- package/src/css/loader.scss +12 -0
- package/src/css/page-panel.scss +65 -0
- package/src/css/project-bar.scss +102 -0
- package/src/css/silex.scss +189 -0
- package/src/css/website-info.scss +14 -0
- package/src/html/debug.pug +8 -0
- package/src/html/index.pug +39 -0
- package/src/html/templates/includes.pug +1 -0
- package/src/html/templates/workspace.pug +2 -0
- package/src/ts/client/api.ts +144 -0
- package/src/ts/client/assetUrl.test.ts +125 -0
- package/src/ts/client/assetUrl.ts +235 -0
- package/src/ts/client/config.ts +105 -0
- package/src/ts/client/events.ts +34 -0
- package/src/ts/client/expose.ts +30 -0
- package/src/ts/client/grapesjs/LoginDialog.ts +204 -0
- package/src/ts/client/grapesjs/PublicationManager.ts +370 -0
- package/src/ts/client/grapesjs/PublicationUi.ts +342 -0
- package/src/ts/client/grapesjs/blocks.ts +37 -0
- package/src/ts/client/grapesjs/breadcrumbs.ts +79 -0
- package/src/ts/client/grapesjs/eleventy.ts +47 -0
- package/src/ts/client/grapesjs/footer.ts +27 -0
- package/src/ts/client/grapesjs/index.ts +335 -0
- package/src/ts/client/grapesjs/internal-links.test.ts +105 -0
- package/src/ts/client/grapesjs/internal-links.ts +225 -0
- package/src/ts/client/grapesjs/new-page-dialog.ts +90 -0
- package/src/ts/client/grapesjs/openImport.ts +81 -0
- package/src/ts/client/grapesjs/page-panel.ts +118 -0
- package/src/ts/client/grapesjs/project-bar.ts +107 -0
- package/src/ts/client/grapesjs/rich-text.ts +33 -0
- package/src/ts/client/grapesjs/semantic.ts +114 -0
- package/src/ts/client/grapesjs/settings.ts +208 -0
- package/src/ts/client/grapesjs/storage.ts +121 -0
- package/src/ts/client/grapesjs/symbolDialogs.ts +38 -0
- package/src/ts/client/index.ts +98 -0
- package/src/ts/client/publication-transformers.test.ts +199 -0
- package/src/ts/client/publication-transformers.ts +263 -0
- package/src/ts/client/utils.ts +28 -0
- package/src/ts/constants.ts +52 -0
- package/src/ts/externs.ts +18 -0
- package/src/ts/page.ts +31 -0
- package/src/ts/plugins/client/11ty.ts +104 -0
- package/src/ts/plugins/client/publicationRenderer.ts +174 -0
- package/src/ts/plugins/client/template.ts +192 -0
- package/src/ts/plugins/client/website-info.ts +84 -0
- package/src/ts/plugins/server/AuthPlugin.ts +38 -0
- package/src/ts/plugins/server/Cache.ts +28 -0
- package/src/ts/plugins/server/DownloadConnector.ts +148 -0
- package/src/ts/plugins/server/FtpConnector.test.ts +82 -0
- package/src/ts/plugins/server/FtpConnector.ts +609 -0
- package/src/ts/plugins/server/GitlabConnector.ts +644 -0
- package/src/ts/plugins/server/PublicationOptimizer.ts +14 -0
- package/src/ts/plugins/server/SslPlugin.ts +84 -0
- package/src/ts/plugins/server/StaticPlugin.ts +79 -0
- package/src/ts/server/api/api.ts +19 -0
- package/src/ts/server/api/connectorApi.ts +345 -0
- package/src/ts/server/api/publicationApi.ts +159 -0
- package/src/ts/server/api/websiteApi.ts +432 -0
- package/src/ts/server/cli.ts +65 -0
- package/src/ts/server/config.ts +189 -0
- package/src/ts/server/connectors/FsHosting.ts +60 -0
- package/src/ts/server/connectors/FsStorage.test.ts +51 -0
- package/src/ts/server/connectors/FsStorage.ts +261 -0
- package/src/ts/server/connectors/connectors.ts +203 -0
- package/src/ts/server/events.ts +37 -0
- package/src/ts/server/expose.ts +19 -0
- package/src/ts/server/express.ts +70 -0
- package/src/ts/server/index.ts +100 -0
- package/src/ts/server/jobs.test.ts +75 -0
- package/src/ts/server/jobs.ts +87 -0
- package/src/ts/server/utils/BackwardCompat.ts +552 -0
- package/src/ts/server/utils/validation.ts +34 -0
- 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"}
|