zyket 1.2.10 → 1.2.12
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/.github/workflows/publish.yml +37 -37
- package/README.md +279 -279
- package/bin/cli.js +201 -201
- package/index.js +32 -32
- package/package.json +54 -50
- package/src/Middleware.js +3 -3
- package/src/extensions/Extension.js +10 -10
- package/src/extensions/bullboard/index.js +38 -38
- package/src/extensions/interactive-storage/index.js +162 -162
- package/src/extensions/interactive-storage/middlewares/MulterMiddleware.js +31 -31
- package/src/extensions/interactive-storage/routes/browse.js +31 -31
- package/src/extensions/interactive-storage/routes/create-folder.js +37 -37
- package/src/extensions/interactive-storage/routes/delete-folder.js +57 -57
- package/src/extensions/interactive-storage/routes/delete.js +41 -41
- package/src/extensions/interactive-storage/routes/download.js +47 -47
- package/src/extensions/interactive-storage/routes/info.js +37 -37
- package/src/extensions/interactive-storage/routes/upload.js +46 -46
- package/src/kernel/HTTPServer.js +31 -31
- package/src/kernel/index.js +78 -78
- package/src/services/Service.js +10 -10
- package/src/services/auth/auth.js +7 -7
- package/src/services/auth/index.js +199 -199
- package/src/services/bullmq/Worker.js +7 -7
- package/src/services/bullmq/index.js +92 -92
- package/src/services/cache/index.js +96 -96
- package/src/services/database/index.js +127 -127
- package/src/services/events/Event.js +6 -6
- package/src/services/events/index.js +59 -59
- package/src/services/express/Express.js +248 -248
- package/src/services/express/Middleware.js +7 -7
- package/src/services/express/RedirectResponse.js +8 -8
- package/src/services/express/Route.js +6 -6
- package/src/services/express/index.js +4 -4
- package/src/services/index.js +29 -29
- package/src/services/logger/index.js +80 -80
- package/src/services/s3/index.js +82 -82
- package/src/services/scheduler/Schedule.js +6 -6
- package/src/services/scheduler/index.js +47 -47
- package/src/services/socketio/Guard.js +10 -10
- package/src/services/socketio/Handler.js +10 -10
- package/src/services/socketio/SocketIO.js +159 -132
- package/src/services/socketio/index.js +4 -4
- package/src/services/template-manager/index.js +73 -73
- package/src/templates/default/config/cors.js +5 -1
- package/src/templates/default/config/swagger.js +15 -15
- package/src/templates/default/frontend/main.jsx +15 -15
- package/src/templates/default/frontend/src/hooks/useAuth.jsx +51 -51
- package/src/templates/default/frontend/src/hooks/useLayout.jsx +18 -18
- package/src/templates/default/frontend/src/layouts/auth/index.jsx +45 -45
- package/src/templates/default/frontend/src/layouts/auth/routes.js +17 -17
- package/src/templates/default/frontend/src/layouts/landing/index.jsx +61 -61
- package/src/templates/default/frontend/src/layouts/landing/routes.js +10 -10
- package/src/templates/default/frontend/src/layouts/panel/index.jsx +115 -115
- package/src/templates/default/frontend/src/layouts/panel/routes.js +10 -10
- package/src/templates/default/frontend/src/middlewares/LoggedMiddleware.jsx +21 -21
- package/src/templates/default/frontend/src/middlewares/NotLoggedMiddleware.jsx +14 -14
- package/src/templates/default/frontend/src/store/index.jsx +5 -5
- package/src/templates/default/frontend/src/store/storeAuth.jsx +14 -14
- package/src/templates/default/frontend/src/views/auth/index.jsx +4 -4
- package/src/templates/default/frontend/src/views/auth/register/index.jsx +4 -4
- package/src/templates/default/frontend/src/views/landing/index.jsx +4 -4
- package/src/templates/default/frontend/src/views/panel/dashboard/index.jsx +4 -4
- package/src/templates/default/frontend/styles.css +1 -1
- package/src/templates/default/src/guards/default.js +6 -6
- package/src/templates/default/src/handlers/connection.js +6 -6
- package/src/templates/default/src/handlers/message.js +8 -8
- package/src/templates/default/src/middlewares/default.js +7 -7
- package/src/templates/default/src/routes/[test]/message.js +26 -26
- package/src/templates/default/src/routes/index.js +22 -22
- package/src/templates/default/src/services/auth/auth.js +7 -7
- package/src/templates/default/src/services/auth/index.js +32 -32
- package/src/utils/EnvManager.js +65 -65
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
module.exports = class Route {
|
|
2
|
-
path;
|
|
3
|
-
|
|
4
|
-
constructor(_path) {
|
|
5
|
-
this.path = _path;
|
|
6
|
-
}
|
|
1
|
+
module.exports = class Route {
|
|
2
|
+
path;
|
|
3
|
+
|
|
4
|
+
constructor(_path) {
|
|
5
|
+
this.path = _path;
|
|
6
|
+
}
|
|
7
7
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
Express: require("./Express"),
|
|
3
|
-
Route: require("./Route"),
|
|
4
|
-
Middleware: require("./Middleware"),
|
|
1
|
+
module.exports = {
|
|
2
|
+
Express: require("./Express"),
|
|
3
|
+
Route: require("./Route"),
|
|
4
|
+
Middleware: require("./Middleware"),
|
|
5
5
|
}
|
package/src/services/index.js
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
const Database = require("./database");
|
|
2
|
-
const Cache = require("./cache");
|
|
3
|
-
const S3 = require("./s3");
|
|
4
|
-
const { SocketIO } = require("./socketio");
|
|
5
|
-
const { Express } = require("./express");
|
|
6
|
-
const Scheduler = require("./scheduler");
|
|
7
|
-
const EventService = require("./events");
|
|
8
|
-
|
|
9
|
-
const eventsActivated = process.env.DISABLE_EVENTS !== 'true';
|
|
10
|
-
const databaseActivated = !!process.env.DATABASE_URL;
|
|
11
|
-
const bullmqActivated = process.env.DISABLE_BULLMQ !== 'true';
|
|
12
|
-
const s3Activated = process.env.S3_ENDPOINT && process.env.S3_ACCESS_KEY && process.env.S3_SECRET_KEY;
|
|
13
|
-
const schedulerActivated = process.env.DISABLE_SCHEDULER !== 'true';
|
|
14
|
-
const socketActivated = process.env.DISABLE_SOCKET !== 'true';
|
|
15
|
-
const expressActivated = process.env.DISABLE_EXPRESS !== 'true';
|
|
16
|
-
const viteActivated = process.env.VITE_ROOT && process.env.DISABLE_VITE !== 'true';
|
|
17
|
-
|
|
18
|
-
module.exports = [
|
|
19
|
-
["logger", require("./logger"), ["@service_container", process.env.LOG_DIRECTORY || `${process.cwd()}/logs`, process.env.DEBUG === "true"]],
|
|
20
|
-
["template-manager", require("./template-manager"), []],
|
|
21
|
-
eventsActivated ? ["events", EventService, ["@service_container"]] : null,
|
|
22
|
-
databaseActivated ? ["database", Database, ["@service_container", process.env.DATABASE_URL]] : null,
|
|
23
|
-
["cache", Cache, ["@service_container", process.env.CACHE_URL || '']],
|
|
24
|
-
s3Activated ? ["s3", S3, ["@service_container", process.env.S3_ENDPOINT, process.env.S3_PORT, process.env.S3_USE_SSL === "true", process.env.S3_ACCESS_KEY, process.env.S3_SECRET_KEY]] : null,
|
|
25
|
-
schedulerActivated ? ["scheduler", Scheduler, ["@service_container"]] : null,
|
|
26
|
-
bullmqActivated ? ["bullmq", require("./bullmq"), ["@service_container"]] : null,
|
|
27
|
-
socketActivated ? ["socketio", SocketIO, ["@service_container"]] : null,
|
|
28
|
-
expressActivated ? ["express", Express, ["@service_container"]] : null,
|
|
29
|
-
viteActivated ? ["vite", require("./vite"), ["@service_container", process.env.VITE_ROOT, Number(process.env.VITE_PORT) || 5173]] : null,
|
|
1
|
+
const Database = require("./database");
|
|
2
|
+
const Cache = require("./cache");
|
|
3
|
+
const S3 = require("./s3");
|
|
4
|
+
const { SocketIO } = require("./socketio");
|
|
5
|
+
const { Express } = require("./express");
|
|
6
|
+
const Scheduler = require("./scheduler");
|
|
7
|
+
const EventService = require("./events");
|
|
8
|
+
|
|
9
|
+
const eventsActivated = process.env.DISABLE_EVENTS !== 'true';
|
|
10
|
+
const databaseActivated = !!process.env.DATABASE_URL;
|
|
11
|
+
const bullmqActivated = process.env.DISABLE_BULLMQ !== 'true';
|
|
12
|
+
const s3Activated = process.env.S3_ENDPOINT && process.env.S3_ACCESS_KEY && process.env.S3_SECRET_KEY;
|
|
13
|
+
const schedulerActivated = process.env.DISABLE_SCHEDULER !== 'true';
|
|
14
|
+
const socketActivated = process.env.DISABLE_SOCKET !== 'true';
|
|
15
|
+
const expressActivated = process.env.DISABLE_EXPRESS !== 'true';
|
|
16
|
+
const viteActivated = process.env.VITE_ROOT && process.env.DISABLE_VITE !== 'true';
|
|
17
|
+
|
|
18
|
+
module.exports = [
|
|
19
|
+
["logger", require("./logger"), ["@service_container", process.env.LOG_DIRECTORY || `${process.cwd()}/logs`, process.env.DEBUG === "true"]],
|
|
20
|
+
["template-manager", require("./template-manager"), []],
|
|
21
|
+
eventsActivated ? ["events", EventService, ["@service_container"]] : null,
|
|
22
|
+
databaseActivated ? ["database", Database, ["@service_container", process.env.DATABASE_URL]] : null,
|
|
23
|
+
["cache", Cache, ["@service_container", process.env.CACHE_URL || '']],
|
|
24
|
+
s3Activated ? ["s3", S3, ["@service_container", process.env.S3_ENDPOINT, process.env.S3_PORT, process.env.S3_USE_SSL === "true", process.env.S3_ACCESS_KEY, process.env.S3_SECRET_KEY]] : null,
|
|
25
|
+
schedulerActivated ? ["scheduler", Scheduler, ["@service_container"]] : null,
|
|
26
|
+
bullmqActivated ? ["bullmq", require("./bullmq"), ["@service_container"]] : null,
|
|
27
|
+
socketActivated ? ["socketio", SocketIO, ["@service_container"]] : null,
|
|
28
|
+
expressActivated ? ["express", Express, ["@service_container"]] : null,
|
|
29
|
+
viteActivated ? ["vite", require("./vite"), ["@service_container", process.env.VITE_ROOT, Number(process.env.VITE_PORT) || 5173]] : null,
|
|
30
30
|
].filter(Boolean);
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
const fs = require("fs");
|
|
2
|
-
const Service = require("../Service");
|
|
3
|
-
require("colors");
|
|
4
|
-
|
|
5
|
-
module.exports = class Logger extends Service {
|
|
6
|
-
#container
|
|
7
|
-
#logDirectory;
|
|
8
|
-
#debugEnabled;
|
|
9
|
-
messageColors = {
|
|
10
|
-
log: "white",
|
|
11
|
-
info: "green",
|
|
12
|
-
warn: "yellow",
|
|
13
|
-
error: "red",
|
|
14
|
-
debug: "blue"
|
|
15
|
-
};
|
|
16
|
-
#storeTries = 0;
|
|
17
|
-
|
|
18
|
-
constructor(container, logDirectory, debugEnabled) {
|
|
19
|
-
super("logger");
|
|
20
|
-
this.#container = container;
|
|
21
|
-
this.#logDirectory = logDirectory;
|
|
22
|
-
this.#debugEnabled = debugEnabled;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
async boot() {
|
|
26
|
-
if (!fs.existsSync(this.#logDirectory)) fs.mkdirSync(this.#logDirectory);
|
|
27
|
-
return this;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
async store(message) {
|
|
31
|
-
if (this.#storeTries > 10) throw new Error("Failed to store log message");
|
|
32
|
-
this.#storeTries++;
|
|
33
|
-
try{
|
|
34
|
-
fs.appendFileSync(`${this.#logDirectory}/${new Date().toISOString().split("T")[0]}.log`, `${message}\n`);
|
|
35
|
-
this.#storeTries = 0;
|
|
36
|
-
} catch (e) {
|
|
37
|
-
if (!fs.existsSync(this.#logDirectory)) {
|
|
38
|
-
fs.mkdirSync(this.#logDirectory);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (!fs.existsSync(`${this.#logDirectory}/${new Date().toISOString().split("T")[0]}.log`)) {
|
|
42
|
-
fs.writeFileSync(`${this.#logDirectory}/${new Date().toISOString().split("T")[0]}.log`, "");
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return this.store(message);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
getDateTimestamp() {
|
|
50
|
-
return new Date().toISOString().replace("T", " ").replace("Z", "");
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
buildMessage(type, message) {
|
|
54
|
-
return `${this.getDateTimestamp()} [${type.toUpperCase()}] ${message}`[this.messageColors[type]];
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
async log(message) {
|
|
58
|
-
console.log(this.buildMessage("log", message));
|
|
59
|
-
this.store(this.buildMessage("log", message));
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
async info(message) {
|
|
63
|
-
console.log(this.buildMessage("info", message));
|
|
64
|
-
this.store(this.buildMessage("info", message));
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
async warn(message) {
|
|
68
|
-
console.log(this.buildMessage("warn", message));
|
|
69
|
-
this.store(this.buildMessage("warn", message));
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
async error(message) {
|
|
73
|
-
console.log(this.buildMessage("error", message));
|
|
74
|
-
this.store(this.buildMessage("error", message));
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
async debug(message) {
|
|
78
|
-
this.#debugEnabled && console.log(this.buildMessage("debug", message));
|
|
79
|
-
this.store(this.buildMessage("debug", message));
|
|
80
|
-
}
|
|
1
|
+
const fs = require("fs");
|
|
2
|
+
const Service = require("../Service");
|
|
3
|
+
require("colors");
|
|
4
|
+
|
|
5
|
+
module.exports = class Logger extends Service {
|
|
6
|
+
#container
|
|
7
|
+
#logDirectory;
|
|
8
|
+
#debugEnabled;
|
|
9
|
+
messageColors = {
|
|
10
|
+
log: "white",
|
|
11
|
+
info: "green",
|
|
12
|
+
warn: "yellow",
|
|
13
|
+
error: "red",
|
|
14
|
+
debug: "blue"
|
|
15
|
+
};
|
|
16
|
+
#storeTries = 0;
|
|
17
|
+
|
|
18
|
+
constructor(container, logDirectory, debugEnabled) {
|
|
19
|
+
super("logger");
|
|
20
|
+
this.#container = container;
|
|
21
|
+
this.#logDirectory = logDirectory;
|
|
22
|
+
this.#debugEnabled = debugEnabled;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async boot() {
|
|
26
|
+
if (!fs.existsSync(this.#logDirectory)) fs.mkdirSync(this.#logDirectory);
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async store(message) {
|
|
31
|
+
if (this.#storeTries > 10) throw new Error("Failed to store log message");
|
|
32
|
+
this.#storeTries++;
|
|
33
|
+
try{
|
|
34
|
+
fs.appendFileSync(`${this.#logDirectory}/${new Date().toISOString().split("T")[0]}.log`, `${message}\n`);
|
|
35
|
+
this.#storeTries = 0;
|
|
36
|
+
} catch (e) {
|
|
37
|
+
if (!fs.existsSync(this.#logDirectory)) {
|
|
38
|
+
fs.mkdirSync(this.#logDirectory);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (!fs.existsSync(`${this.#logDirectory}/${new Date().toISOString().split("T")[0]}.log`)) {
|
|
42
|
+
fs.writeFileSync(`${this.#logDirectory}/${new Date().toISOString().split("T")[0]}.log`, "");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return this.store(message);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
getDateTimestamp() {
|
|
50
|
+
return new Date().toISOString().replace("T", " ").replace("Z", "");
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
buildMessage(type, message) {
|
|
54
|
+
return `${this.getDateTimestamp()} [${type.toUpperCase()}] ${message}`[this.messageColors[type]];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async log(message) {
|
|
58
|
+
console.log(this.buildMessage("log", message));
|
|
59
|
+
this.store(this.buildMessage("log", message));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async info(message) {
|
|
63
|
+
console.log(this.buildMessage("info", message));
|
|
64
|
+
this.store(this.buildMessage("info", message));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async warn(message) {
|
|
68
|
+
console.log(this.buildMessage("warn", message));
|
|
69
|
+
this.store(this.buildMessage("warn", message));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async error(message) {
|
|
73
|
+
console.log(this.buildMessage("error", message));
|
|
74
|
+
this.store(this.buildMessage("error", message));
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async debug(message) {
|
|
78
|
+
this.#debugEnabled && console.log(this.buildMessage("debug", message));
|
|
79
|
+
this.store(this.buildMessage("debug", message));
|
|
80
|
+
}
|
|
81
81
|
}
|
package/src/services/s3/index.js
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
const Service = require("../Service");
|
|
2
|
-
const MinioService = require('minio')
|
|
3
|
-
|
|
4
|
-
module.exports = class S3 extends Service {
|
|
5
|
-
#container
|
|
6
|
-
#endPoint
|
|
7
|
-
#port
|
|
8
|
-
#useSSL
|
|
9
|
-
#accessKey
|
|
10
|
-
#secretKey
|
|
11
|
-
|
|
12
|
-
constructor(container, endPoint, port, useSSL, accessKey, secretKey) {
|
|
13
|
-
super('s3')
|
|
14
|
-
this.#container = container
|
|
15
|
-
this.#endPoint = endPoint
|
|
16
|
-
this.#port = port
|
|
17
|
-
this.#useSSL = useSSL
|
|
18
|
-
this.#accessKey = accessKey
|
|
19
|
-
this.#secretKey = secretKey
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async boot() {
|
|
23
|
-
this.client = new MinioService.Client({
|
|
24
|
-
endPoint: this.#endPoint,
|
|
25
|
-
port: this.#port,
|
|
26
|
-
useSSL: this.#useSSL,
|
|
27
|
-
accessKey: this.#accessKey,
|
|
28
|
-
secretKey: this.#secretKey
|
|
29
|
-
})
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async saveFile(bucketName, fileName, file, contentType = 'binary/octet-stream') {
|
|
33
|
-
this.#container.get('logger').debug(`Saving file ${fileName} to bucket ${bucketName}`);
|
|
34
|
-
return new Promise((resolve, reject) => {
|
|
35
|
-
this.client.putObject(
|
|
36
|
-
bucketName,
|
|
37
|
-
fileName,
|
|
38
|
-
file,
|
|
39
|
-
{
|
|
40
|
-
"Content-Type": contentType
|
|
41
|
-
},
|
|
42
|
-
(err, etag) => {
|
|
43
|
-
if (err) return reject(err);
|
|
44
|
-
resolve(etag);
|
|
45
|
-
}
|
|
46
|
-
);
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
async getFile(bucketName, fileName) {
|
|
51
|
-
return new Promise((resolve, reject) => {
|
|
52
|
-
let data = ''
|
|
53
|
-
this.client.getObject(bucketName, fileName, (err, stream) => {
|
|
54
|
-
if(err) return reject(err)
|
|
55
|
-
stream.on('data', (chunk) => {
|
|
56
|
-
data += chunk
|
|
57
|
-
})
|
|
58
|
-
stream.on('end', () => {
|
|
59
|
-
resolve(data)
|
|
60
|
-
})
|
|
61
|
-
})
|
|
62
|
-
})
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
async removeFile(bucketName, fileName) {
|
|
66
|
-
this.#container.get('logger').debug(`Removing file ${fileName} from bucket ${bucketName}`);
|
|
67
|
-
return this.client.removeObject(bucketName, fileName)
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
async createBucket(bucketName) {
|
|
71
|
-
this.#container.get('logger').debug(`Creating bucket ${bucketName}`);
|
|
72
|
-
return this.client.makeBucket(bucketName, 'us-east-1')
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
listBuckets() {
|
|
76
|
-
return new Promise((resolve, reject) => {
|
|
77
|
-
this.client.listBuckets((err, buckets) => {
|
|
78
|
-
if(err) return reject(err)
|
|
79
|
-
resolve(buckets)
|
|
80
|
-
})
|
|
81
|
-
})
|
|
82
|
-
}
|
|
1
|
+
const Service = require("../Service");
|
|
2
|
+
const MinioService = require('minio')
|
|
3
|
+
|
|
4
|
+
module.exports = class S3 extends Service {
|
|
5
|
+
#container
|
|
6
|
+
#endPoint
|
|
7
|
+
#port
|
|
8
|
+
#useSSL
|
|
9
|
+
#accessKey
|
|
10
|
+
#secretKey
|
|
11
|
+
|
|
12
|
+
constructor(container, endPoint, port, useSSL, accessKey, secretKey) {
|
|
13
|
+
super('s3')
|
|
14
|
+
this.#container = container
|
|
15
|
+
this.#endPoint = endPoint
|
|
16
|
+
this.#port = port
|
|
17
|
+
this.#useSSL = useSSL
|
|
18
|
+
this.#accessKey = accessKey
|
|
19
|
+
this.#secretKey = secretKey
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async boot() {
|
|
23
|
+
this.client = new MinioService.Client({
|
|
24
|
+
endPoint: this.#endPoint,
|
|
25
|
+
port: this.#port,
|
|
26
|
+
useSSL: this.#useSSL,
|
|
27
|
+
accessKey: this.#accessKey,
|
|
28
|
+
secretKey: this.#secretKey
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async saveFile(bucketName, fileName, file, contentType = 'binary/octet-stream') {
|
|
33
|
+
this.#container.get('logger').debug(`Saving file ${fileName} to bucket ${bucketName}`);
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
this.client.putObject(
|
|
36
|
+
bucketName,
|
|
37
|
+
fileName,
|
|
38
|
+
file,
|
|
39
|
+
{
|
|
40
|
+
"Content-Type": contentType
|
|
41
|
+
},
|
|
42
|
+
(err, etag) => {
|
|
43
|
+
if (err) return reject(err);
|
|
44
|
+
resolve(etag);
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async getFile(bucketName, fileName) {
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
let data = ''
|
|
53
|
+
this.client.getObject(bucketName, fileName, (err, stream) => {
|
|
54
|
+
if(err) return reject(err)
|
|
55
|
+
stream.on('data', (chunk) => {
|
|
56
|
+
data += chunk
|
|
57
|
+
})
|
|
58
|
+
stream.on('end', () => {
|
|
59
|
+
resolve(data)
|
|
60
|
+
})
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async removeFile(bucketName, fileName) {
|
|
66
|
+
this.#container.get('logger').debug(`Removing file ${fileName} from bucket ${bucketName}`);
|
|
67
|
+
return this.client.removeObject(bucketName, fileName)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async createBucket(bucketName) {
|
|
71
|
+
this.#container.get('logger').debug(`Creating bucket ${bucketName}`);
|
|
72
|
+
return this.client.makeBucket(bucketName, 'us-east-1')
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
listBuckets() {
|
|
76
|
+
return new Promise((resolve, reject) => {
|
|
77
|
+
this.client.listBuckets((err, buckets) => {
|
|
78
|
+
if(err) return reject(err)
|
|
79
|
+
resolve(buckets)
|
|
80
|
+
})
|
|
81
|
+
})
|
|
82
|
+
}
|
|
83
83
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
module.exports = class Schedule {
|
|
2
|
-
name;
|
|
3
|
-
|
|
4
|
-
constructor(name) {
|
|
5
|
-
this.name = name;
|
|
6
|
-
}
|
|
1
|
+
module.exports = class Schedule {
|
|
2
|
+
name;
|
|
3
|
+
|
|
4
|
+
constructor(name) {
|
|
5
|
+
this.name = name;
|
|
6
|
+
}
|
|
7
7
|
}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
const Service = require("../Service");
|
|
2
|
-
const Schedule = require("./Schedule");
|
|
3
|
-
const fs = require("fs");
|
|
4
|
-
const path = require("path");
|
|
5
|
-
const fg = require('fast-glob');
|
|
6
|
-
const cron = require('node-cron');
|
|
7
|
-
|
|
8
|
-
module.exports = class Scheduler extends Service {
|
|
9
|
-
#container
|
|
10
|
-
|
|
11
|
-
constructor(container) {
|
|
12
|
-
super("scheduler");
|
|
13
|
-
this.#container = container;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
async boot() {
|
|
17
|
-
const schedulers = await this.#loadSchedulersFromFolder(path.join(process.cwd(), "src", "schedulers"));
|
|
18
|
-
await this.#container.get('logger').info(`Loaded ${schedulers.length} schedulers`);
|
|
19
|
-
for (const schd of schedulers) {
|
|
20
|
-
cron.schedule(schd.time, () => {
|
|
21
|
-
try {
|
|
22
|
-
schd.handle({ container: this.#container })
|
|
23
|
-
} catch (e) {
|
|
24
|
-
this.#container.get('logger').error(`Error executing scheduler ${schd.name}: ${e.message}`);
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
this.#container.get('logger').info(`Scheduler ${schd.name}, ${schd.time} initialized`);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
async #loadSchedulersFromFolder(schedulersFolder) {
|
|
32
|
-
this.#createSchedulersFolder(schedulersFolder);
|
|
33
|
-
const schedulers = (await fg('**/*.js', { cwd: schedulersFolder })).map((schd) => {
|
|
34
|
-
const schedule = require(path.join(schedulersFolder, schd));
|
|
35
|
-
if(!(schedule.prototype instanceof Schedule)) throw new Error(`${schd} is not a valid handler`);
|
|
36
|
-
return new schedule(schd.replace('.js', ''));
|
|
37
|
-
});
|
|
38
|
-
return schedulers;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
#createSchedulersFolder(schedulersFolder, overwrite = false) {
|
|
42
|
-
if (fs.existsSync(schedulersFolder) && !overwrite) return;
|
|
43
|
-
this.#container.get('logger').info(`Creating schedules folder at ${schedulersFolder}`);
|
|
44
|
-
fs.mkdirSync(schedulersFolder);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
1
|
+
const Service = require("../Service");
|
|
2
|
+
const Schedule = require("./Schedule");
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const fg = require('fast-glob');
|
|
6
|
+
const cron = require('node-cron');
|
|
7
|
+
|
|
8
|
+
module.exports = class Scheduler extends Service {
|
|
9
|
+
#container
|
|
10
|
+
|
|
11
|
+
constructor(container) {
|
|
12
|
+
super("scheduler");
|
|
13
|
+
this.#container = container;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async boot() {
|
|
17
|
+
const schedulers = await this.#loadSchedulersFromFolder(path.join(process.cwd(), "src", "schedulers"));
|
|
18
|
+
await this.#container.get('logger').info(`Loaded ${schedulers.length} schedulers`);
|
|
19
|
+
for (const schd of schedulers) {
|
|
20
|
+
cron.schedule(schd.time, () => {
|
|
21
|
+
try {
|
|
22
|
+
schd.handle({ container: this.#container })
|
|
23
|
+
} catch (e) {
|
|
24
|
+
this.#container.get('logger').error(`Error executing scheduler ${schd.name}: ${e.message}`);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
this.#container.get('logger').info(`Scheduler ${schd.name}, ${schd.time} initialized`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async #loadSchedulersFromFolder(schedulersFolder) {
|
|
32
|
+
this.#createSchedulersFolder(schedulersFolder);
|
|
33
|
+
const schedulers = (await fg('**/*.js', { cwd: schedulersFolder })).map((schd) => {
|
|
34
|
+
const schedule = require(path.join(schedulersFolder, schd));
|
|
35
|
+
if(!(schedule.prototype instanceof Schedule)) throw new Error(`${schd} is not a valid handler`);
|
|
36
|
+
return new schedule(schd.replace('.js', ''));
|
|
37
|
+
});
|
|
38
|
+
return schedulers;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
#createSchedulersFolder(schedulersFolder, overwrite = false) {
|
|
42
|
+
if (fs.existsSync(schedulersFolder) && !overwrite) return;
|
|
43
|
+
this.#container.get('logger').info(`Creating schedules folder at ${schedulersFolder}`);
|
|
44
|
+
fs.mkdirSync(schedulersFolder);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
48
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
module.exports = class Guard {
|
|
2
|
-
name;
|
|
3
|
-
|
|
4
|
-
constructor(name) {
|
|
5
|
-
this.name = name;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
async handle({ container, socket}) {
|
|
9
|
-
throw new Error("Method 'handle' must be implemented.");
|
|
10
|
-
}
|
|
1
|
+
module.exports = class Guard {
|
|
2
|
+
name;
|
|
3
|
+
|
|
4
|
+
constructor(name) {
|
|
5
|
+
this.name = name;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
async handle({ container, socket}) {
|
|
9
|
+
throw new Error("Method 'handle' must be implemented.");
|
|
10
|
+
}
|
|
11
11
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
module.exports = class Handler {
|
|
2
|
-
event;
|
|
3
|
-
|
|
4
|
-
constructor(event) {
|
|
5
|
-
this.event = event;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
handle({ container, socket, data }) {
|
|
9
|
-
throw new Error("You should implement 'handle()' method on your handler");
|
|
10
|
-
}
|
|
1
|
+
module.exports = class Handler {
|
|
2
|
+
event;
|
|
3
|
+
|
|
4
|
+
constructor(event) {
|
|
5
|
+
this.event = event;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
handle({ container, socket, data }) {
|
|
9
|
+
throw new Error("You should implement 'handle()' method on your handler");
|
|
10
|
+
}
|
|
11
11
|
}
|