@yellowpanther/shared 1.0.0 → 1.1.0
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/package.json +3 -1
- package/src/config/index.js +26 -2
- package/src/redis/redisClient.js +20 -12
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yellowpanther/shared",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Reusable shared utilities for YP microservices (e.g., redis, queue, config)",
|
|
5
5
|
"author": "Yellow Panther",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -11,10 +11,12 @@
|
|
|
11
11
|
"README.md"
|
|
12
12
|
],
|
|
13
13
|
"exports": {
|
|
14
|
+
".": "./src/index.js",
|
|
14
15
|
"./config": "./src/config/index.js",
|
|
15
16
|
"./redis/redisClient": "./src/redis/redisClient.js",
|
|
16
17
|
"./queue/compressionQueue": "./src/queue/compressionQueue.js",
|
|
17
18
|
"./queue/newsTranslationQueue": "./src/queue/newsTranslationQueue.js",
|
|
19
|
+
"./queue/newsTranslateQueue": "./src/queue/newsTranslateQueue.js",
|
|
18
20
|
"./queue/queueRegistry": "./src/queue/queueRegistry.js"
|
|
19
21
|
},
|
|
20
22
|
"scripts": {
|
package/src/config/index.js
CHANGED
|
@@ -9,9 +9,16 @@ const envValidation = Joi.object()
|
|
|
9
9
|
APP_NAME: Joi.string().default('ip-cms'),
|
|
10
10
|
NODE_ENV: Joi.string().valid('development', 'production', 'test').required(),
|
|
11
11
|
PORT: Joi.number().default(4006),
|
|
12
|
+
IS_DOCKER_MYSQL: Joi.string().default("false"),
|
|
13
|
+
DOCKER_DB_HOST: Joi.string().default("db"),
|
|
14
|
+
DOCKER_DB_PORT: Joi.number().default(3306),
|
|
15
|
+
DOCKER_DB_USER: Joi.string().optional(),
|
|
16
|
+
DOCKER_DB_PASSWORD: Joi.string().optional(),
|
|
17
|
+
DOCKER_DB_NAME: Joi.string().optional(),
|
|
18
|
+
DOCKER_ROOT_PASSWORD: Joi.string().optional(),
|
|
12
19
|
DB_HOST: Joi.string().default('localhost'),
|
|
13
20
|
DB_USER: Joi.string().required(),
|
|
14
|
-
|
|
21
|
+
DB_PASSWORD: Joi.string().required(),
|
|
15
22
|
DB_NAME: Joi.string().required(),
|
|
16
23
|
JWT_SECRET: Joi.string().required().description('JWT secret key'),
|
|
17
24
|
JWT_ACCESS_EXPIRATION_MINUTES: Joi.number().default(30),
|
|
@@ -94,8 +101,25 @@ module.exports = {
|
|
|
94
101
|
port: envVar.PORT,
|
|
95
102
|
dbHost: envVar.DB_HOST,
|
|
96
103
|
dbUser: envVar.DB_USER,
|
|
97
|
-
dbPass: envVar.
|
|
104
|
+
dbPass: envVar.DB_PASSWORD,
|
|
98
105
|
dbName: envVar.DB_NAME,
|
|
106
|
+
db: {
|
|
107
|
+
host: envVar.DB_HOST,
|
|
108
|
+
port: envVar.DB_PORT,
|
|
109
|
+
username: envVar.DB_USER,
|
|
110
|
+
password: envVar.DB_PASSWORD,
|
|
111
|
+
database: envVar.DB_NAME,
|
|
112
|
+
backupFolder: envVar.DB_BACKUP_FOLDER,
|
|
113
|
+
docker:{
|
|
114
|
+
isDockerMysql: envVar.IS_DOCKER_MYSQL,
|
|
115
|
+
host: envVar.DOCKER_DB_HOST,
|
|
116
|
+
port: envVar.DOCKER_DB_PORT,
|
|
117
|
+
username: envVar.DOCKER_DB_USER,
|
|
118
|
+
password: envVar.DOCKER_DB_PASSWORD,
|
|
119
|
+
database: envVar.DOCKER_DB_NAME,
|
|
120
|
+
rootPassword: envVar.DOCKER_ROOT_PASSWORD,
|
|
121
|
+
}
|
|
122
|
+
},
|
|
99
123
|
app: {
|
|
100
124
|
name: process.env.APP_NAME || 'ip-cms',
|
|
101
125
|
env: process.env.NODE_ENV || 'development',
|
package/src/redis/redisClient.js
CHANGED
|
@@ -1,17 +1,25 @@
|
|
|
1
|
-
const
|
|
2
|
-
require('
|
|
1
|
+
const IORedis = require('ioredis');
|
|
2
|
+
const { redis } = require('./config');
|
|
3
3
|
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
})
|
|
4
|
+
const redisOptions = {
|
|
5
|
+
host: redis.host,
|
|
6
|
+
port: redis.port,
|
|
7
|
+
...(redis.usePassword?.toUpperCase() === 'YES' && { password: redis.password }),
|
|
8
|
+
maxRetriesPerRequest: null, // Required for BullMQ compatibility
|
|
9
|
+
enableReadyCheck: false, // Optional: for fast startup
|
|
10
|
+
reconnectOnError: err => {
|
|
11
|
+
const targetErrors = ['READONLY', 'ECONNREFUSED'];
|
|
12
|
+
if (targetErrors.some(msg => err.message.includes(msg))) {
|
|
13
|
+
console.warn('🔁 Reconnecting Redis due to:', err.message);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
},
|
|
18
|
+
};
|
|
8
19
|
|
|
9
|
-
redisClient
|
|
10
|
-
console.log('✅ Shared Redis client connected');
|
|
11
|
-
});
|
|
20
|
+
const redisClient = new IORedis(redisOptions);
|
|
12
21
|
|
|
13
|
-
redisClient.on('
|
|
14
|
-
|
|
15
|
-
});
|
|
22
|
+
redisClient.on('connect', () => console.log('✅ Redis connected'));
|
|
23
|
+
redisClient.on('error', err => console.error('❌ Redis error:', err.message));
|
|
16
24
|
|
|
17
25
|
module.exports = redisClient;
|