@hastehaul/common 1.0.11 → 1.0.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/build/connections-wrappers/redis-connection-wrapper.d.ts +17 -0
- package/build/connections-wrappers/redis-connection-wrapper.js +17 -0
- package/build/connections-wrappers/socket-connection-wrapper.d.ts +20 -1
- package/build/connections-wrappers/socket-connection-wrapper.js +19 -0
- package/build/middlewares/current-user.d.ts +9 -0
- package/build/middlewares/current-user.js +18 -0
- package/build/middlewares/error-handler.d.ts +8 -0
- package/build/middlewares/error-handler.js +8 -0
- package/build/utils/base_classes/jobs/base-producers.d.ts +16 -0
- package/build/utils/base_classes/jobs/base-producers.js +9 -1
- package/build/utils/base_classes/jobs/base-worker.d.ts +16 -0
- package/build/utils/base_classes/jobs/base-worker.js +11 -0
- package/build/utils/random-codes.d.ts +12 -0
- package/build/utils/random-codes.js +52 -0
- package/build/utils/read-dir.js +0 -10
- package/package.json +1 -1
@@ -1,9 +1,26 @@
|
|
1
1
|
import IORedis from "ioredis";
|
2
|
+
/**
|
3
|
+
* A wrapper class for the Redis client to manage connections and provide a centralized client instance.
|
4
|
+
*/
|
2
5
|
export declare class RedisWrapper {
|
3
6
|
private _redisClient?;
|
4
7
|
private host;
|
5
8
|
private port;
|
9
|
+
/**
|
10
|
+
* Get the Redis client instance.
|
11
|
+
*
|
12
|
+
* @throws {Error} - Throws an error if the Redis client is accessed before connecting.
|
13
|
+
* @returns {IORedis} - The Redis client instance.
|
14
|
+
*/
|
6
15
|
get client(): IORedis;
|
16
|
+
/**
|
17
|
+
* Connect to the Redis server using the specified host and port.
|
18
|
+
*
|
19
|
+
* The client instance will be stored in the `_redisClient` property for later access.
|
20
|
+
*/
|
7
21
|
connect(): void;
|
8
22
|
}
|
23
|
+
/**
|
24
|
+
* Singleton instance of the RedisWrapper class to provide a centralized Redis client connection.
|
25
|
+
*/
|
9
26
|
export declare const redisWrapper: RedisWrapper;
|
@@ -5,16 +5,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
exports.redisWrapper = exports.RedisWrapper = void 0;
|
7
7
|
const ioredis_1 = __importDefault(require("ioredis"));
|
8
|
+
/**
|
9
|
+
* A wrapper class for the Redis client to manage connections and provide a centralized client instance.
|
10
|
+
*/
|
8
11
|
class RedisWrapper {
|
9
12
|
constructor() {
|
10
13
|
this.host = "customer-redis-srv";
|
11
14
|
this.port = 6379;
|
12
15
|
}
|
16
|
+
/**
|
17
|
+
* Get the Redis client instance.
|
18
|
+
*
|
19
|
+
* @throws {Error} - Throws an error if the Redis client is accessed before connecting.
|
20
|
+
* @returns {IORedis} - The Redis client instance.
|
21
|
+
*/
|
13
22
|
get client() {
|
14
23
|
if (!this._redisClient)
|
15
24
|
throw new Error("Cannot access Redis Client before connecting");
|
16
25
|
return this._redisClient;
|
17
26
|
}
|
27
|
+
/**
|
28
|
+
* Connect to the Redis server using the specified host and port.
|
29
|
+
*
|
30
|
+
* The client instance will be stored in the `_redisClient` property for later access.
|
31
|
+
*/
|
18
32
|
connect() {
|
19
33
|
this._redisClient = new ioredis_1.default({ host: this.host, port: this.port, maxRetriesPerRequest: null });
|
20
34
|
this._redisClient.on("connect", function () {
|
@@ -26,4 +40,7 @@ class RedisWrapper {
|
|
26
40
|
}
|
27
41
|
}
|
28
42
|
exports.RedisWrapper = RedisWrapper;
|
43
|
+
/**
|
44
|
+
* Singleton instance of the RedisWrapper class to provide a centralized Redis client connection.
|
45
|
+
*/
|
29
46
|
exports.redisWrapper = new RedisWrapper();
|
@@ -1,9 +1,28 @@
|
|
1
1
|
/// <reference types="node" />
|
2
2
|
import http from "http";
|
3
3
|
import { Server } from 'socket.io';
|
4
|
+
/**
|
5
|
+
* A wrapper class for the Socket.IO server to manage connections and provide a centralized server instance.
|
6
|
+
*/
|
4
7
|
export declare class SocketWrapper {
|
5
8
|
protected _io?: Server;
|
6
|
-
|
9
|
+
/**
|
10
|
+
* Get the Socket.IO server instance.
|
11
|
+
*
|
12
|
+
* @throws {Error} - Throws an error if the Socket.IO server is accessed before connecting.
|
13
|
+
* @returns {Server} - The Socket.IO server instance.
|
14
|
+
*/
|
15
|
+
get io(): Server;
|
16
|
+
/**
|
17
|
+
* Connect to the Socket.IO server using the specified HTTP server.
|
18
|
+
*
|
19
|
+
* The server instance will be stored in the `_io` property for later access.
|
20
|
+
*
|
21
|
+
* @param {http.Server} httpServer - The HTTP server instance to attach Socket.IO to.
|
22
|
+
*/
|
7
23
|
connect(httpServer: http.Server): void;
|
8
24
|
}
|
25
|
+
/**
|
26
|
+
* Singleton instance of the SocketWrapper class to provide a centralized Socket.IO server connection.
|
27
|
+
*/
|
9
28
|
export declare const socketWrapper: SocketWrapper;
|
@@ -2,12 +2,28 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.socketWrapper = exports.SocketWrapper = void 0;
|
4
4
|
const socket_io_1 = require("socket.io");
|
5
|
+
/**
|
6
|
+
* A wrapper class for the Socket.IO server to manage connections and provide a centralized server instance.
|
7
|
+
*/
|
5
8
|
class SocketWrapper {
|
9
|
+
/**
|
10
|
+
* Get the Socket.IO server instance.
|
11
|
+
*
|
12
|
+
* @throws {Error} - Throws an error if the Socket.IO server is accessed before connecting.
|
13
|
+
* @returns {Server} - The Socket.IO server instance.
|
14
|
+
*/
|
6
15
|
get io() {
|
7
16
|
if (!this._io)
|
8
17
|
throw new Error("Cannot access IO Client before connecting");
|
9
18
|
return this._io;
|
10
19
|
}
|
20
|
+
/**
|
21
|
+
* Connect to the Socket.IO server using the specified HTTP server.
|
22
|
+
*
|
23
|
+
* The server instance will be stored in the `_io` property for later access.
|
24
|
+
*
|
25
|
+
* @param {http.Server} httpServer - The HTTP server instance to attach Socket.IO to.
|
26
|
+
*/
|
11
27
|
connect(httpServer) {
|
12
28
|
this._io = new socket_io_1.Server(httpServer, {
|
13
29
|
path: "/socket/",
|
@@ -22,4 +38,7 @@ class SocketWrapper {
|
|
22
38
|
}
|
23
39
|
}
|
24
40
|
exports.SocketWrapper = SocketWrapper;
|
41
|
+
/**
|
42
|
+
* Singleton instance of the SocketWrapper class to provide a centralized Socket.IO server connection.
|
43
|
+
*/
|
25
44
|
exports.socketWrapper = new SocketWrapper();
|
@@ -1,2 +1,11 @@
|
|
1
1
|
import { Request, Response, NextFunction } from "express";
|
2
|
+
/**
|
3
|
+
* Middleware function to extract the current user from the request's Authorization header.
|
4
|
+
*
|
5
|
+
* @param {Request} req - The Express Request object.
|
6
|
+
* @param {Response} res - The Express Response object.
|
7
|
+
* @param {NextFunction} next - The next function in the middleware chain.
|
8
|
+
*
|
9
|
+
* @returns {Promise<void>} - A Promise that resolves once the user extraction is complete, but it is not used directly.
|
10
|
+
*/
|
2
11
|
export declare const currentUser: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
@@ -34,26 +34,44 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
34
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
35
35
|
exports.currentUser = void 0;
|
36
36
|
const jsonwebtoken_1 = __importStar(require("jsonwebtoken"));
|
37
|
+
/**
|
38
|
+
* Middleware function to extract the current user from the request's Authorization header.
|
39
|
+
*
|
40
|
+
* @param {Request} req - The Express Request object.
|
41
|
+
* @param {Response} res - The Express Response object.
|
42
|
+
* @param {NextFunction} next - The next function in the middleware chain.
|
43
|
+
*
|
44
|
+
* @returns {Promise<void>} - A Promise that resolves once the user extraction is complete, but it is not used directly.
|
45
|
+
*/
|
37
46
|
const currentUser = (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
|
38
47
|
let result = null;
|
39
48
|
try {
|
49
|
+
// Extract the Bearer token from the Authorization header.
|
40
50
|
const bearerToken = req.headers["authorization"];
|
41
51
|
if (typeof bearerToken !== "undefined" && bearerToken) {
|
42
52
|
const token = bearerToken.split(" ")[1];
|
43
53
|
if (token) {
|
54
|
+
// Verify the JWT token and decode the user payload.
|
44
55
|
result = jsonwebtoken_1.default.verify(token, process.env.JWT_KEY.split("-").join(""));
|
45
56
|
}
|
46
57
|
}
|
58
|
+
// Attach the user payload to the request object for later use in the application.
|
47
59
|
req.currentUser = result;
|
48
60
|
}
|
49
61
|
catch (err) {
|
62
|
+
// Handle errors related to token verification or expiration.
|
50
63
|
if (err instanceof jsonwebtoken_1.TokenExpiredError) {
|
64
|
+
// If the token is expired, you may consider refreshing the token or taking appropriate actions.
|
65
|
+
// Uncomment the following line if you want to handle token expiration using the AuthController.
|
66
|
+
// await AuthController.refreshToken(req, res);
|
51
67
|
// await AuthController.refreshToken(req, res)
|
52
68
|
}
|
53
69
|
else {
|
70
|
+
// If any other error occurs during token verification, set currentUser to null.
|
54
71
|
req.currentUser = null;
|
55
72
|
}
|
56
73
|
}
|
74
|
+
// Call the next middleware in the chain.
|
57
75
|
next();
|
58
76
|
});
|
59
77
|
exports.currentUser = currentUser;
|
@@ -1,2 +1,10 @@
|
|
1
1
|
import { NextFunction, Request, Response } from "express";
|
2
|
+
/**
|
3
|
+
* Express error handling middleware to handle custom errors and provide appropriate responses.
|
4
|
+
*
|
5
|
+
* @param {Error} err - The error object that needs to be handled.
|
6
|
+
* @param {Request} req - The Express Request object.
|
7
|
+
* @param {Response} res - The Express Response object.
|
8
|
+
* @param {NextFunction} next - The next function in the middleware chain.
|
9
|
+
*/
|
2
10
|
export declare const errorHandler: (err: Error, req: Request, res: Response, next: NextFunction) => Response<any, Record<string, any>> | undefined;
|
@@ -3,6 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.errorHandler = void 0;
|
4
4
|
const custom_error_1 = require("../errors/custom-error");
|
5
5
|
const enums_1 = require("../utils/enums");
|
6
|
+
/**
|
7
|
+
* Express error handling middleware to handle custom errors and provide appropriate responses.
|
8
|
+
*
|
9
|
+
* @param {Error} err - The error object that needs to be handled.
|
10
|
+
* @param {Request} req - The Express Request object.
|
11
|
+
* @param {Response} res - The Express Response object.
|
12
|
+
* @param {NextFunction} next - The next function in the middleware chain.
|
13
|
+
*/
|
6
14
|
const errorHandler = (err, req, res, next) => {
|
7
15
|
if (err instanceof custom_error_1.CustomError) {
|
8
16
|
return res.status(err.statusCode).send({ errors: err.serializeErrors() });
|
@@ -1,7 +1,23 @@
|
|
1
1
|
import { Queue } from "bullmq";
|
2
|
+
/**
|
3
|
+
* Abstract class representing a Job Queue.
|
4
|
+
*/
|
2
5
|
export declare abstract class AbstractJobQueue {
|
3
6
|
protected que: Queue;
|
4
7
|
protected abstract jobName: string;
|
8
|
+
/**
|
9
|
+
* Creates an instance of AbstractJobQueue.
|
10
|
+
*
|
11
|
+
* @param {string} queueName - The name of the job queue.
|
12
|
+
*/
|
5
13
|
constructor(queueName: string);
|
14
|
+
/**
|
15
|
+
* Abstract method to add jobs to the job queue.
|
16
|
+
*
|
17
|
+
* This method should be implemented by subclasses to add specific jobs to the queue.
|
18
|
+
*
|
19
|
+
* @param {any} data - The data representing the job to be added to the queue.
|
20
|
+
* @returns {Promise<void>} - A Promise that resolves when the job is added to the queue successfully.
|
21
|
+
*/
|
6
22
|
abstract addJobs(data: any): Promise<void>;
|
7
23
|
}
|
@@ -3,9 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AbstractJobQueue = void 0;
|
4
4
|
const bullmq_1 = require("bullmq");
|
5
5
|
const connections_wrappers_1 = require("../../../connections-wrappers");
|
6
|
-
|
6
|
+
/**
|
7
|
+
* Abstract class representing a Job Queue.
|
8
|
+
*/
|
7
9
|
class AbstractJobQueue {
|
10
|
+
/**
|
11
|
+
* Creates an instance of AbstractJobQueue.
|
12
|
+
*
|
13
|
+
* @param {string} queueName - The name of the job queue.
|
14
|
+
*/
|
8
15
|
constructor(queueName) {
|
16
|
+
// Initialize the job queue with the provided name and a Redis connection from the redisWrapper.
|
9
17
|
this.que = new bullmq_1.Queue(queueName, { connection: connections_wrappers_1.redisWrapper.client });
|
10
18
|
}
|
11
19
|
}
|
@@ -1,6 +1,22 @@
|
|
1
1
|
import { Job, Worker } from "bullmq";
|
2
|
+
/**
|
3
|
+
* Abstract class representing a worker for processing jobs from a Job Queue.
|
4
|
+
*/
|
2
5
|
export declare abstract class AbstractWorker {
|
3
6
|
protected worker: Worker;
|
7
|
+
/**
|
8
|
+
* Creates an instance of AbstractWorker.
|
9
|
+
*
|
10
|
+
* @param {string} queueName - The name of the job queue that this worker will process jobs from.
|
11
|
+
*/
|
4
12
|
constructor(queueName: string);
|
13
|
+
/**
|
14
|
+
* Abstract method to process jobs retrieved from the job queue.
|
15
|
+
*
|
16
|
+
* This method should be implemented by subclasses to handle specific job processing logic.
|
17
|
+
*
|
18
|
+
* @param {Job} job - The job object representing the job to be processed.
|
19
|
+
* @returns {Promise<void>} - A Promise that resolves when the job processing is completed successfully.
|
20
|
+
*/
|
5
21
|
protected abstract process(job: Job): Promise<void>;
|
6
22
|
}
|
@@ -3,15 +3,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AbstractWorker = void 0;
|
4
4
|
const bullmq_1 = require("bullmq");
|
5
5
|
const connections_wrappers_1 = require("../../../connections-wrappers");
|
6
|
+
/**
|
7
|
+
* Abstract class representing a worker for processing jobs from a Job Queue.
|
8
|
+
*/
|
6
9
|
class AbstractWorker {
|
10
|
+
/**
|
11
|
+
* Creates an instance of AbstractWorker.
|
12
|
+
*
|
13
|
+
* @param {string} queueName - The name of the job queue that this worker will process jobs from.
|
14
|
+
*/
|
7
15
|
constructor(queueName) {
|
16
|
+
// Create a worker instance with the provided queueName and bind the 'process' method to this worker.
|
8
17
|
this.worker = new bullmq_1.Worker(queueName, this.process.bind(this), {
|
9
18
|
connection: connections_wrappers_1.redisWrapper.client,
|
10
19
|
autorun: false,
|
11
20
|
});
|
21
|
+
// Handle errors that may occur during job processing.
|
12
22
|
this.worker.on("error", (err) => {
|
13
23
|
console.error(`${queueName} Error: `, err);
|
14
24
|
});
|
25
|
+
// Start the worker in non-autorun mode, which means it won't start processing jobs automatically.
|
15
26
|
console.log(" --- WORKER STARTED --- ", queueName);
|
16
27
|
this.worker.run();
|
17
28
|
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
/**
|
2
|
+
* Generates random codes as an async function using await.
|
3
|
+
*
|
4
|
+
* @param {string} characters - The set of characters to use for generating codes.
|
5
|
+
* @param {number} numberOfCodes - The total number of codes to generate.
|
6
|
+
* @param {number} codeSize - The size of each individual code (number of characters).
|
7
|
+
* @param {boolean} includeHyphens - Whether to include hyphens between codes.
|
8
|
+
* @param {number} chunkSize - The number of codes to generate in each chunk (iteration).
|
9
|
+
*
|
10
|
+
* @returns {Promise<string>} - A Promise that resolves with the generated codes as a string.
|
11
|
+
*/
|
12
|
+
declare function generateRandomCodesAsync(characters: string, numberOfCodes: number, codeSize: number, includeHyphens: boolean, chunkSize: number): Promise<string>;
|
@@ -0,0 +1,52 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
/**
|
12
|
+
* Generates random codes as an async function using await.
|
13
|
+
*
|
14
|
+
* @param {string} characters - The set of characters to use for generating codes.
|
15
|
+
* @param {number} numberOfCodes - The total number of codes to generate.
|
16
|
+
* @param {number} codeSize - The size of each individual code (number of characters).
|
17
|
+
* @param {boolean} includeHyphens - Whether to include hyphens between codes.
|
18
|
+
* @param {number} chunkSize - The number of codes to generate in each chunk (iteration).
|
19
|
+
*
|
20
|
+
* @returns {Promise<string>} - A Promise that resolves with the generated codes as a string.
|
21
|
+
*/
|
22
|
+
function generateRandomCodesAsync(characters, numberOfCodes, codeSize, includeHyphens, chunkSize) {
|
23
|
+
return __awaiter(this, void 0, void 0, function* () {
|
24
|
+
let codes = "";
|
25
|
+
let hyphen = includeHyphens ? "-" : "";
|
26
|
+
let chunkStart = 0;
|
27
|
+
let generatedCodes = new Set();
|
28
|
+
function generateChunk() {
|
29
|
+
return __awaiter(this, void 0, void 0, function* () {
|
30
|
+
for (let i = chunkStart; i < chunkStart + chunkSize && i < numberOfCodes; i++) {
|
31
|
+
let code = "";
|
32
|
+
for (let j = 0; j < codeSize; j++) {
|
33
|
+
code += characters.charAt(Math.floor(Math.random() * characters.length));
|
34
|
+
}
|
35
|
+
if (!generatedCodes.has(code)) {
|
36
|
+
generatedCodes.add(code);
|
37
|
+
codes += code + (i === numberOfCodes - 1 ? "" : hyphen);
|
38
|
+
}
|
39
|
+
else {
|
40
|
+
i--;
|
41
|
+
}
|
42
|
+
}
|
43
|
+
chunkStart += chunkSize;
|
44
|
+
if (chunkStart < numberOfCodes && generatedCodes.size < numberOfCodes) {
|
45
|
+
yield generateChunk();
|
46
|
+
}
|
47
|
+
});
|
48
|
+
}
|
49
|
+
yield generateChunk();
|
50
|
+
return codes;
|
51
|
+
});
|
52
|
+
}
|
package/build/utils/read-dir.js
CHANGED
@@ -39,13 +39,3 @@ function readDirectoryRecursive(dirPath, filter) {
|
|
39
39
|
});
|
40
40
|
}
|
41
41
|
exports.readDirectoryRecursive = readDirectoryRecursive;
|
42
|
-
// // Example usage:
|
43
|
-
// const directoryPath = '/path/to/your/directory';
|
44
|
-
// (async () => {
|
45
|
-
// try {
|
46
|
-
// const filteredFiles = await readDirectoryRecursive(directoryPath, (filePath) => filePath.endsWith('.txt'));
|
47
|
-
// console.log(filteredFiles);
|
48
|
-
// } catch (err) {
|
49
|
-
// console.error('Error occurred:', err);
|
50
|
-
// }
|
51
|
-
// })();
|