@eventista/ticketing-common 1.0.53 → 1.0.55
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/dist/database/redis/redis.module.js +30 -82
- package/dist/database/redis/redis.module.js.map +1 -1
- package/dist/database/redis/redis.service.d.ts +12 -3
- package/dist/database/redis/redis.service.js +120 -19
- package/dist/database/redis/redis.service.js.map +1 -1
- package/dist/exception/exception.filter.js +1 -1
- package/dist/exception/exception.filter.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -30,122 +30,70 @@ const RedisClusterProvider = {
|
|
|
30
30
|
callback(null, address);
|
|
31
31
|
},
|
|
32
32
|
clusterRetryStrategy: (times) => {
|
|
33
|
-
const delay = Math.min(times *
|
|
33
|
+
const delay = Math.min(times * 200, 5000);
|
|
34
34
|
logger.warn(`Retrying Redis Cluster connection: Attempt ${times}, Delay ${delay}ms`);
|
|
35
35
|
return delay;
|
|
36
36
|
},
|
|
37
37
|
redisOptions: {
|
|
38
38
|
tls: {
|
|
39
39
|
rejectUnauthorized: false,
|
|
40
|
+
checkServerIdentity: () => undefined,
|
|
41
|
+
secureProtocol: 'TLSv1_2_method',
|
|
40
42
|
},
|
|
41
|
-
connectTimeout: Number(configService.get('REDIS_CONNECT_TIMEOUT',
|
|
42
|
-
commandTimeout: Number(configService.get('REDIS_COMMAND_TIMEOUT',
|
|
43
|
+
connectTimeout: Number(configService.get('REDIS_CONNECT_TIMEOUT', 10000)),
|
|
44
|
+
commandTimeout: Number(configService.get('REDIS_COMMAND_TIMEOUT', 30000)),
|
|
43
45
|
retryStrategy: (times) => {
|
|
44
46
|
logger.warn(`Redis node connection attempt ${times} failed. Retrying...`);
|
|
45
|
-
if (times >
|
|
46
|
-
logger.error('Redis node connection failed after
|
|
47
|
+
if (times > 10) {
|
|
48
|
+
logger.error('Redis node connection failed after 10 attempts. Giving up.');
|
|
47
49
|
return null;
|
|
48
50
|
}
|
|
49
|
-
const delay = Math.min(times *
|
|
51
|
+
const delay = Math.min(times * 100, 3000);
|
|
50
52
|
logger.log(`Retrying Redis node connection in ${delay}ms`);
|
|
51
53
|
return delay;
|
|
52
54
|
},
|
|
55
|
+
keepAlive: 10000,
|
|
56
|
+
noDelay: true,
|
|
53
57
|
},
|
|
54
58
|
enableReadyCheck: true,
|
|
55
59
|
enableOfflineQueue: true,
|
|
56
60
|
scaleReads: 'slave',
|
|
57
|
-
slotsRefreshTimeout:
|
|
58
|
-
slotsRefreshInterval:
|
|
59
|
-
maxRedirections:
|
|
60
|
-
retryDelayOnFailover:
|
|
61
|
-
retryDelayOnClusterDown:
|
|
62
|
-
retryDelayOnTryAgain:
|
|
61
|
+
slotsRefreshTimeout: 15000,
|
|
62
|
+
slotsRefreshInterval: 15000,
|
|
63
|
+
maxRedirections: 20,
|
|
64
|
+
retryDelayOnFailover: 200,
|
|
65
|
+
retryDelayOnClusterDown: 2000,
|
|
66
|
+
retryDelayOnTryAgain: 200,
|
|
67
|
+
disconnectTimeout: 30000,
|
|
68
|
+
autoResendUnfulfilledCommands: true,
|
|
69
|
+
maxRetriesPerRequest: 5,
|
|
63
70
|
});
|
|
64
71
|
cluster.on('connect', () => {
|
|
65
72
|
logger.log('Connected to Redis Cluster');
|
|
66
73
|
});
|
|
67
74
|
cluster.on('ready', () => {
|
|
68
75
|
logger.log('Redis Cluster is ready');
|
|
69
|
-
try {
|
|
70
|
-
const nodes = cluster.nodes();
|
|
71
|
-
logger.log(`Cluster has ${nodes.length} nodes`);
|
|
72
|
-
nodes.forEach(node => {
|
|
73
|
-
logger.log(`Node: ${node.options.host}:${node.options.port} (${node.options.role || 'unknown role'})`);
|
|
74
|
-
});
|
|
75
|
-
logger.log('Fetching detailed cluster info...');
|
|
76
|
-
cluster.cluster('NODES', (err, result) => {
|
|
77
|
-
if (err) {
|
|
78
|
-
logger.error('Failed to get CLUSTER NODES info', err);
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
const nodeLines = result.split('\n').filter(line => line.trim());
|
|
82
|
-
logger.log(`CLUSTER NODES returned ${nodeLines.length} nodes`);
|
|
83
|
-
const masterNodes = [];
|
|
84
|
-
const replicaNodes = [];
|
|
85
|
-
nodeLines.forEach(line => {
|
|
86
|
-
const parts = line.split(' ');
|
|
87
|
-
const nodeId = parts[0];
|
|
88
|
-
const endpoint = parts[1].split('@')[0];
|
|
89
|
-
const flags = parts[2];
|
|
90
|
-
const master = parts[3];
|
|
91
|
-
const slots = parts.slice(8).join(' ');
|
|
92
|
-
const nodeInfo = {
|
|
93
|
-
id: nodeId,
|
|
94
|
-
endpoint,
|
|
95
|
-
flags,
|
|
96
|
-
master: master === '-' ? 'is_master' : `replica_of_${master}`,
|
|
97
|
-
slots: slots || 'no_slots'
|
|
98
|
-
};
|
|
99
|
-
if (flags.includes('master')) {
|
|
100
|
-
masterNodes.push(nodeInfo);
|
|
101
|
-
}
|
|
102
|
-
else if (flags.includes('slave')) {
|
|
103
|
-
replicaNodes.push(nodeInfo);
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
logger.log(`Cluster has ${masterNodes.length} masters and ${replicaNodes.length} replicas`);
|
|
107
|
-
masterNodes.forEach(node => {
|
|
108
|
-
logger.log(`Master: ${node.endpoint} (${node.id.substring(0, 8)}), Slots: ${node.slots}`);
|
|
109
|
-
});
|
|
110
|
-
replicaNodes.forEach(node => {
|
|
111
|
-
logger.log(`Replica: ${node.endpoint} (${node.id.substring(0, 8)}), ${node.master}`);
|
|
112
|
-
});
|
|
113
|
-
if (replicaNodes.length === 0) {
|
|
114
|
-
logger.warn('No replica nodes found! scaleReads: "slave" will not work as expected.');
|
|
115
|
-
logger.warn('All read commands will be sent to master nodes.');
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
cluster.cluster('SLOTS', (err, result) => {
|
|
119
|
-
if (err) {
|
|
120
|
-
logger.error('Failed to get CLUSTER SLOTS info', err);
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
logger.log(`CLUSTER SLOTS returned ${result.length} slot ranges`);
|
|
124
|
-
result.forEach(slotInfo => {
|
|
125
|
-
const startSlot = slotInfo[0];
|
|
126
|
-
const endSlot = slotInfo[1];
|
|
127
|
-
const masterHost = slotInfo[2][0];
|
|
128
|
-
const masterPort = slotInfo[2][1];
|
|
129
|
-
const replicas = slotInfo.slice(3).map(replica => `${replica[0]}:${replica[1]}`);
|
|
130
|
-
logger.log(`Slots ${startSlot}-${endSlot} -> Master: ${masterHost}:${masterPort}, Replicas: ${replicas.length > 0 ? replicas.join(', ') : 'none'}`);
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
catch (err) {
|
|
135
|
-
logger.error('Failed to get cluster nodes info', err);
|
|
136
|
-
}
|
|
137
76
|
});
|
|
138
77
|
cluster.on('error', (err) => {
|
|
139
78
|
logger.error(`Redis Cluster error: ${err.message}`, err.stack);
|
|
140
79
|
});
|
|
141
80
|
cluster.on('close', () => {
|
|
142
|
-
logger.warn('Redis Cluster connection closed');
|
|
81
|
+
logger.warn('Redis Cluster connection closed - Will attempt to reconnect automatically');
|
|
143
82
|
});
|
|
144
83
|
cluster.on('reconnecting', () => {
|
|
145
84
|
logger.log('Redis Cluster reconnecting');
|
|
146
85
|
});
|
|
147
86
|
cluster.on('end', () => {
|
|
148
|
-
logger.warn('Redis Cluster connection ended');
|
|
87
|
+
logger.warn('Redis Cluster connection ended - Will need manual reconnection');
|
|
88
|
+
setTimeout(() => {
|
|
89
|
+
logger.log('Attempting to manually reconnect to Redis Cluster...');
|
|
90
|
+
try {
|
|
91
|
+
cluster.connect();
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
logger.error('Failed to manually reconnect to Redis Cluster', error.stack);
|
|
95
|
+
}
|
|
96
|
+
}, 5000);
|
|
149
97
|
});
|
|
150
98
|
cluster.on('node error', (err, address) => {
|
|
151
99
|
logger.error(`Redis Cluster node ${address} error: ${err.message}`, err.stack);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.module.js","sourceRoot":"","sources":["../../../src/database/redis/redis.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA0D;AAC1D,2CAA6D;AAC7D,mDAA+C;AAC/C,8DAA0D;AAI1D,MAAM,oBAAoB,GAAa;IACrC,OAAO,EAAE,eAAe;IACxB,UAAU,EAAE,CAAC,aAA4B,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,IAAI,4BAAY,CAAC,oBAAoB,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAEjC,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAEvD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAS,oBAAoB,EAAE,WAAW,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAS,oBAAoB,EAAE,IAAI,CAAC,CAAC;QAEnE,MAAM,CAAC,GAAG,CAAC,kDAAkD,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAG7E,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,OAAO,CAC/B;YACE;gBACE,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,IAAI;aACX;SACF,EACD;YAEE,SAAS,EAAE,CAAC,OAAe,EAAE,QAA8C,EAAE,EAAE;gBAC7E,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1B,CAAC;YAGD,oBAAoB,EAAE,CAAC,KAAa,EAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"redis.module.js","sourceRoot":"","sources":["../../../src/database/redis/redis.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
|
|
2
|
-
import
|
|
2
|
+
import { Cluster } from 'ioredis';
|
|
3
|
+
import { ConfigService } from '@nestjs/config';
|
|
3
4
|
export declare class RedisService implements OnModuleInit, OnModuleDestroy {
|
|
4
5
|
private readonly redis;
|
|
6
|
+
private readonly configService;
|
|
5
7
|
private readonly customLogger;
|
|
6
|
-
|
|
8
|
+
private connectionHealthCheckInterval;
|
|
9
|
+
private reconnectAttempts;
|
|
10
|
+
private readonly maxReconnectAttempts;
|
|
11
|
+
constructor(redis: Cluster, configService: ConfigService);
|
|
7
12
|
onModuleInit(): Promise<void>;
|
|
13
|
+
private attemptReconnect;
|
|
14
|
+
private checkConnectionHealth;
|
|
15
|
+
private getClusterInfo;
|
|
8
16
|
onModuleDestroy(): Promise<void>;
|
|
9
|
-
getClient():
|
|
17
|
+
getClient(): Cluster;
|
|
10
18
|
ping(): Promise<boolean>;
|
|
19
|
+
executeWithRetry<T>(command: string, args?: any[], maxRetries?: number): Promise<T>;
|
|
11
20
|
getInfo(): Promise<any>;
|
|
12
21
|
get(key: string): Promise<string | null>;
|
|
13
22
|
set(key: string, value: string, ttl?: number): Promise<'OK'>;
|
|
@@ -11,46 +11,123 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
|
-
var RedisService_1;
|
|
15
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
15
|
exports.RedisService = void 0;
|
|
17
16
|
const common_1 = require("@nestjs/common");
|
|
18
17
|
const ioredis_1 = require("ioredis");
|
|
18
|
+
const config_1 = require("@nestjs/config");
|
|
19
19
|
const custom_logger_1 = require("../../logger/custom.logger");
|
|
20
|
-
let RedisService =
|
|
21
|
-
constructor(redis) {
|
|
20
|
+
let RedisService = class RedisService {
|
|
21
|
+
constructor(redis, configService) {
|
|
22
22
|
this.redis = redis;
|
|
23
|
-
this.
|
|
24
|
-
this.customLogger.
|
|
23
|
+
this.configService = configService;
|
|
24
|
+
this.customLogger = new custom_logger_1.CustomLogger('RedisService');
|
|
25
|
+
this.reconnectAttempts = 0;
|
|
26
|
+
this.maxReconnectAttempts = 20;
|
|
25
27
|
}
|
|
26
28
|
async onModuleInit() {
|
|
27
|
-
this.customLogger.log('
|
|
29
|
+
this.customLogger.log('Initializing Redis Service...');
|
|
30
|
+
this.connectionHealthCheckInterval = setInterval(() => {
|
|
31
|
+
this.checkConnectionHealth();
|
|
32
|
+
}, 30000);
|
|
33
|
+
this.redis.on('error', (err) => {
|
|
34
|
+
this.customLogger.error(`Redis error: ${err.message}`, err.stack);
|
|
35
|
+
this.attemptReconnect();
|
|
36
|
+
});
|
|
37
|
+
this.redis.on('close', () => {
|
|
38
|
+
this.customLogger.warn('Redis connection closed');
|
|
39
|
+
this.attemptReconnect();
|
|
40
|
+
});
|
|
28
41
|
try {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
await this.ping();
|
|
43
|
+
this.customLogger.log('Redis Cluster connection successful');
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
this.customLogger.error('Failed to connect to Redis Cluster', error.stack);
|
|
47
|
+
this.attemptReconnect();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
attemptReconnect() {
|
|
51
|
+
if (this.reconnectAttempts >= this.maxReconnectAttempts) {
|
|
52
|
+
this.customLogger.error(`Failed to reconnect to Redis after ${this.maxReconnectAttempts} attempts`);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
this.reconnectAttempts++;
|
|
56
|
+
const delay = Math.min(this.reconnectAttempts * 1000, 10000);
|
|
57
|
+
this.customLogger.log(`Attempting to reconnect to Redis (attempt ${this.reconnectAttempts}) in ${delay}ms...`);
|
|
58
|
+
setTimeout(async () => {
|
|
59
|
+
try {
|
|
60
|
+
try {
|
|
61
|
+
this.redis.disconnect(false);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
}
|
|
65
|
+
await this.redis.connect();
|
|
66
|
+
const isConnected = await this.ping();
|
|
67
|
+
if (isConnected) {
|
|
68
|
+
this.customLogger.log('Successfully reconnected to Redis Cluster');
|
|
69
|
+
this.reconnectAttempts = 0;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
throw new Error('Ping failed after reconnect');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
this.customLogger.error(`Reconnect attempt ${this.reconnectAttempts} failed`, error.stack);
|
|
77
|
+
this.attemptReconnect();
|
|
78
|
+
}
|
|
79
|
+
}, delay);
|
|
80
|
+
}
|
|
81
|
+
async checkConnectionHealth() {
|
|
82
|
+
try {
|
|
83
|
+
const isConnected = await this.ping();
|
|
84
|
+
if (isConnected) {
|
|
85
|
+
const info = await this.getClusterInfo();
|
|
86
|
+
if (info) {
|
|
87
|
+
this.customLogger.log(`Redis Cluster health check: OK`);
|
|
88
|
+
this.customLogger.log(`Cluster state: ${info.cluster_state}`);
|
|
40
89
|
this.customLogger.log(`Cluster slots assigned: ${info.cluster_slots_assigned}`);
|
|
41
90
|
this.customLogger.log(`Cluster slots ok: ${info.cluster_slots_ok}`);
|
|
42
91
|
}
|
|
43
92
|
}
|
|
44
93
|
else {
|
|
45
94
|
this.customLogger.warn('Redis Cluster ping failed, connection may not be healthy');
|
|
95
|
+
this.attemptReconnect();
|
|
46
96
|
}
|
|
47
97
|
}
|
|
48
98
|
catch (error) {
|
|
49
99
|
this.customLogger.error('Failed to check Redis Cluster connection', error.stack);
|
|
100
|
+
this.attemptReconnect();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async getClusterInfo() {
|
|
104
|
+
try {
|
|
105
|
+
const result = await this.redis.cluster('INFO');
|
|
106
|
+
const info = {};
|
|
107
|
+
if (typeof result === 'string') {
|
|
108
|
+
const lines = result.split('\r\n');
|
|
109
|
+
for (const line of lines) {
|
|
110
|
+
if (line && !line.startsWith('#')) {
|
|
111
|
+
const [key, value] = line.split(':');
|
|
112
|
+
if (key && value) {
|
|
113
|
+
info[key.trim()] = value.trim();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return info;
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
this.customLogger.error('Failed to get cluster info', error.stack);
|
|
123
|
+
return null;
|
|
50
124
|
}
|
|
51
125
|
}
|
|
52
126
|
async onModuleDestroy() {
|
|
53
127
|
this.customLogger.log('Closing Redis Cluster connection...');
|
|
128
|
+
if (this.connectionHealthCheckInterval) {
|
|
129
|
+
clearInterval(this.connectionHealthCheckInterval);
|
|
130
|
+
}
|
|
54
131
|
try {
|
|
55
132
|
await this.redis.quit();
|
|
56
133
|
this.customLogger.log('Redis Cluster connection closed gracefully');
|
|
@@ -79,6 +156,29 @@ let RedisService = RedisService_1 = class RedisService {
|
|
|
79
156
|
return false;
|
|
80
157
|
}
|
|
81
158
|
}
|
|
159
|
+
async executeWithRetry(command, args = [], maxRetries = 3) {
|
|
160
|
+
let retries = 0;
|
|
161
|
+
let lastError;
|
|
162
|
+
while (retries <= maxRetries) {
|
|
163
|
+
try {
|
|
164
|
+
return await this.redis[command](...args);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
lastError = error;
|
|
168
|
+
if (error.message.includes('Connection is closed') ||
|
|
169
|
+
error.message.includes('Connection timeout') ||
|
|
170
|
+
error.message.includes('failed to refresh slots cache')) {
|
|
171
|
+
this.customLogger.warn(`Redis command ${command} failed (attempt ${retries + 1}/${maxRetries + 1}): ${error.message}`);
|
|
172
|
+
const delay = Math.min((retries + 1) * 200, 2000);
|
|
173
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
174
|
+
retries++;
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
throw error;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
throw lastError;
|
|
181
|
+
}
|
|
82
182
|
async getInfo() {
|
|
83
183
|
try {
|
|
84
184
|
const infoStr = await this.redis.info();
|
|
@@ -196,9 +296,10 @@ let RedisService = RedisService_1 = class RedisService {
|
|
|
196
296
|
}
|
|
197
297
|
};
|
|
198
298
|
exports.RedisService = RedisService;
|
|
199
|
-
exports.RedisService = RedisService =
|
|
299
|
+
exports.RedisService = RedisService = __decorate([
|
|
200
300
|
(0, common_1.Injectable)(),
|
|
201
301
|
__param(0, (0, common_1.Inject)('REDIS_CLUSTER')),
|
|
202
|
-
__metadata("design:paramtypes", [ioredis_1.
|
|
302
|
+
__metadata("design:paramtypes", [ioredis_1.Cluster,
|
|
303
|
+
config_1.ConfigService])
|
|
203
304
|
], RedisService);
|
|
204
305
|
//# sourceMappingURL=redis.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.service.js","sourceRoot":"","sources":["../../../src/database/redis/redis.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"redis.service.js","sourceRoot":"","sources":["../../../src/database/redis/redis.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,7 +48,7 @@ let GlobalExceptionFilter = GlobalExceptionFilter_1 = class GlobalExceptionFilte
|
|
|
48
48
|
const errorResponse = {
|
|
49
49
|
statusCode: status,
|
|
50
50
|
errorCode: status,
|
|
51
|
-
message: '
|
|
51
|
+
message: 'Hệ thống đang bận, vui lòng thử lại sau.',
|
|
52
52
|
path: request.url,
|
|
53
53
|
timestamp: new Date().toISOString(),
|
|
54
54
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exception.filter.js","sourceRoot":"","sources":["../../src/exception/exception.filter.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAMwB;AACxB,2DAAuD;AAGhD,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAA3B;QACY,WAAM,GAAG,IAAI,4BAAY,CAAC,uBAAqB,CAAC,IAAI,CAAC,CAAC;IAuFzE,CAAC;IArFC,KAAK,CAAC,SAAc,EAAE,IAAmB;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QAGjC,MAAM,MAAM,GACV,SAAS,YAAY,sBAAa;YAChC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE;YACvB,CAAC,CAAC,mBAAU,CAAC,qBAAqB,CAAC;QAGvC,IAAI,MAAM,KAAK,mBAAU,CAAC,WAAW,IAAI,SAAS,YAAY,sBAAa,EAAE,CAAC;YAC5E,MAAM,iBAAiB,GAAG,SAAS,CAAC,WAAW,EAAS,CAAC;YAGzD,IAAI,iBAAiB,CAAC,OAAO,KAAK,mBAAmB,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBAClF,MAAM,aAAa,GAAG;oBACpB,UAAU,EAAE,MAAM;oBAClB,OAAO,EAAE,iBAAiB,CAAC,OAAO;oBAClC,MAAM,EAAE,iBAAiB,CAAC,MAAM;oBAChC,IAAI,EAAE,OAAO,CAAC,GAAG;oBACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC;gBAGF,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAGD,IAAI,SAAS,YAAY,sBAAa,EAAE,CAAC;YACvC,MAAM,iBAAiB,GAAG,SAAS,CAAC,WAAW,EAAS,CAAC;YAGzD,MAAM,aAAa,GAAG;gBACpB,UAAU,EAAE,MAAM;gBAClB,SAAS,EAAE,iBAAiB,CAAC,IAAI,IAAI,MAAM;gBAC3C,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,IAAI,EAAE,OAAO,CAAC,GAAG;gBACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YAEF,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC;QAGD,MAAM,aAAa,GAAG;YACpB,UAAU,EAAE,MAAM;YAClB,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"exception.filter.js","sourceRoot":"","sources":["../../src/exception/exception.filter.ts"],"names":[],"mappings":"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"}
|