Skip to content

Commit 10b4caa

Browse files
committed
fix CI
1 parent a313482 commit 10b4caa

11 files changed

Lines changed: 89 additions & 48 deletions

File tree

src/common/controllers/audit.controller.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,10 +247,11 @@ export class AuditController {
247247
encryptedSample: `${encrypted.encrypted.substring(0, 20)}...`,
248248
};
249249
} catch (error) {
250+
const errMsg = error instanceof Error ? error.message : String(error);
250251
return {
251252
status: 'error',
252253
message: 'Encryption test failed',
253-
error: error.message,
254+
error: errMsg,
254255
};
255256
}
256257
}

src/common/guards/api-key.guard.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ export class EnhancedApiKeyGuard implements CanActivate {
8181

8282
return true;
8383
} catch (error) {
84-
this.logger.warn(`API key authentication failed: ${error.message}`);
84+
const errMsg = error instanceof Error ? error.message : String(error);
85+
this.logger.warn(`API key authentication failed: ${errMsg}`);
8586
throw error;
8687
}
8788
}

src/common/interceptors/audit.interceptor.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ export class AuditInterceptor implements NestInterceptor {
9191
},
9292
error: async error => {
9393
try {
94+
const errMsg = error instanceof Error ? error.message : String(error);
9495
const method = request.method;
9596
const userId = request.user?.id || null;
9697
const tableName = this.extractTableNameFromRoute(request.route?.path);
@@ -102,7 +103,7 @@ export class AuditInterceptor implements NestInterceptor {
102103
newData: {
103104
action: 'FAILED_OPERATION',
104105
method,
105-
error: error.message,
106+
error: errMsg,
106107
url: request.url,
107108
},
108109
userId,

src/common/services/cache.service.ts

Lines changed: 43 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ export class CacheService {
102102
return undefined;
103103
}
104104
} catch (error) {
105-
this.logger.error(`Cache GET error for key ${key}: ${error.message}`);
105+
const errMsg = error instanceof Error ? error.message : String(error);
106+
this.logger.error(`Cache GET error for key ${key}: ${errMsg}`);
106107
return undefined;
107108
}
108109
}
@@ -117,7 +118,8 @@ export class CacheService {
117118
this.trackAccessPattern(key, 'set');
118119
this.logger.debug(`Cache SET: ${key} with TTL: ${ttl}s`);
119120
} catch (error) {
120-
this.logger.error(`Cache SET error for key ${key}: ${error.message}`);
121+
const errMsg = error instanceof Error ? error.message : String(error);
122+
this.logger.error(`Cache SET error for key ${key}: ${errMsg}`);
121123
}
122124
}
123125

@@ -149,7 +151,8 @@ export class CacheService {
149151
this.trackAccessPattern(key, 'del');
150152
this.logger.debug(`Cache DEL: ${key}`);
151153
} catch (error) {
152-
this.logger.error(`Cache DEL error for key ${key}: ${error.message}`);
154+
const errMsg = error instanceof Error ? error.message : String(error);
155+
this.logger.error(`Cache DEL error for key ${key}: ${errMsg}`);
153156
}
154157
}
155158

@@ -162,7 +165,8 @@ export class CacheService {
162165
await this.redisService.flushdb();
163166
this.logger.debug('Cache cleared');
164167
} catch (error) {
165-
this.logger.error(`Cache CLEAR error: ${error.message}`);
168+
const errMsg = error instanceof Error ? error.message : String(error);
169+
this.logger.error(`Cache CLEAR error: ${errMsg}`);
166170
}
167171
}
168172

@@ -173,7 +177,8 @@ export class CacheService {
173177
try {
174178
return await this.redisService.keys(pattern);
175179
} catch (error) {
176-
this.logger.error(`Cache KEYS error for pattern ${pattern}: ${error.message}`);
180+
const errMsg = error instanceof Error ? error.message : String(error);
181+
this.logger.error(`Cache KEYS error for pattern ${pattern}: ${errMsg}`);
177182
return [];
178183
}
179184
}
@@ -186,7 +191,8 @@ export class CacheService {
186191
const exists = await this.redisService.exists(key);
187192
return exists;
188193
} catch (error) {
189-
this.logger.error(`Cache HAS error for key ${key}: ${error.message}`);
194+
const errMsg = error instanceof Error ? error.message : String(error);
195+
this.logger.error(`Cache HAS error for key ${key}: ${errMsg}`);
190196
return false;
191197
}
192198
}
@@ -198,7 +204,8 @@ export class CacheService {
198204
try {
199205
return await this.redisService.ttl(key);
200206
} catch (error) {
201-
this.logger.error(`Cache TTL error for key ${key}: ${error.message}`);
207+
const errMsg = error instanceof Error ? error.message : String(error);
208+
this.logger.error(`Cache TTL error for key ${key}: ${errMsg}`);
202209
return -1;
203210
}
204211
}
@@ -361,13 +368,15 @@ export class CacheService {
361368
await this.set(key, freshValue, options);
362369
return freshValue;
363370
} catch (error) {
364-
this.logger.error(`Cache operation failed for key ${key}, attempting fallback: ${error.message}`);
371+
const errMsg = error instanceof Error ? error.message : String(error);
372+
this.logger.error(`Cache operation failed for key ${key}, attempting fallback: ${errMsg}`);
365373

366374
// Try fallback even if cache operations failed
367375
try {
368376
return await fallbackFactory();
369377
} catch (fallbackError) {
370-
this.logger.error(`Fallback also failed for key ${key}: ${fallbackError.message}`);
378+
const fallbackErrMsg = fallbackError instanceof Error ? fallbackError.message : String(fallbackError);
379+
this.logger.error(`Fallback also failed for key ${key}: ${fallbackErrMsg}`);
371380
throw fallbackError;
372381
}
373382
}
@@ -403,7 +412,8 @@ export class CacheService {
403412
const value = await this.get<T>(key);
404413
results.push(value);
405414
} catch (error) {
406-
this.logger.error(`Cache MGET error for key ${key}: ${error.message}`);
415+
const errMsg = error instanceof Error ? error.message : String(error);
416+
this.logger.error(`Cache MGET error for key ${key}: ${errMsg}`);
407417
results.push(undefined);
408418
}
409419
}
@@ -472,7 +482,8 @@ export class CacheService {
472482
await this.set(task.key, value, task.options);
473483
this.logger.log(`Cache WARM completed: ${task.key}`);
474484
} catch (error) {
475-
this.logger.error(`Cache WARM failed for key ${task.key}: ${error.message}`);
485+
const errMsg = error instanceof Error ? error.message : String(error);
486+
this.logger.error(`Cache WARM failed for key ${task.key}: ${errMsg}`);
476487
}
477488
});
478489

@@ -563,7 +574,8 @@ export class CacheService {
563574
// This is a simplified approach - in production you might want to use Redis INFO command
564575
memoryUsage = keys.length * 1024; // Estimate 1KB per key
565576
} catch (error) {
566-
this.logger.warn(`Could not get memory usage: ${error.message}`);
577+
const errMsg = error instanceof Error ? error.message : String(error);
578+
this.logger.warn(`Could not get memory usage: ${errMsg}`);
567579
}
568580

569581
return {
@@ -574,7 +586,8 @@ export class CacheService {
574586
metrics: this.metrics,
575587
};
576588
} catch (error) {
577-
this.logger.error(`Failed to get cache stats: ${error.message}`);
589+
const errMsg = error instanceof Error ? error.message : String(error);
590+
this.logger.error(`Failed to get cache stats: ${errMsg}`);
578591
throw error;
579592
}
580593
}
@@ -667,7 +680,8 @@ export class CacheService {
667680

668681
this.logger.log(`Published cache invalidation event for key: ${key}`);
669682
} catch (error) {
670-
this.logger.error(`Failed to publish cache invalidation event: ${error.message}`);
683+
const errMsg = error instanceof Error ? error.message : String(error);
684+
this.logger.error(`Failed to publish cache invalidation event: ${errMsg}`);
671685
}
672686
}
673687

@@ -692,14 +706,16 @@ export class CacheService {
692706
this.logger.log(`Invalidated cache key from distributed event: ${event.key}`);
693707
}
694708
} catch (error) {
695-
this.logger.error(`Failed to process cache invalidation event: ${error.message}`);
709+
const errMsg = error instanceof Error ? error.message : String(error);
710+
this.logger.error(`Failed to process cache invalidation event: ${errMsg}`);
696711
}
697712
}
698713
});
699714

700715
this.logger.log('Subscribed to cache invalidation events for distributed consistency');
701716
} catch (error) {
702-
this.logger.error(`Failed to subscribe to cache invalidation events: ${error.message}`);
717+
const errMsg = error instanceof Error ? error.message : String(error);
718+
this.logger.error(`Failed to subscribe to cache invalidation events: ${errMsg}`);
703719
}
704720
}
705721

@@ -723,7 +739,8 @@ export class CacheService {
723739
const result = await this.redisService.setex(lockKey, ttl, lockValue);
724740
return result !== null;
725741
} catch (error) {
726-
this.logger.error(`Failed to acquire distributed lock: ${error.message}`);
742+
const errMsg = error instanceof Error ? error.message : String(error);
743+
this.logger.error(`Failed to acquire distributed lock: ${errMsg}`);
727744
return false;
728745
}
729746
}
@@ -748,7 +765,8 @@ export class CacheService {
748765
const result = await this.redisService.eval(luaScript, [lockKey], [nodeId]);
749766
return result === 1;
750767
} catch (error) {
751-
this.logger.error(`Failed to release distributed lock: ${error.message}`);
768+
const errMsg = error instanceof Error ? error.message : String(error);
769+
this.logger.error(`Failed to release distributed lock: ${errMsg}`);
752770
return false;
753771
}
754772
}
@@ -820,13 +838,14 @@ export class CacheService {
820838
const retryDelay = options?.retryDelay ?? 100;
821839
const fallbackOnFailure = options?.fallbackOnFailure ?? true;
822840

823-
let lastError: Error;
841+
let lastError: Error | undefined = undefined;
824842

825843
for (let attempt = 1; attempt <= maxRetries; attempt++) {
826844
try {
827845
return await operation();
828846
} catch (error) {
829-
this.logger.warn(`Cache operation attempt ${attempt}/${maxRetries} failed: ${error.message}`);
847+
const errMsg = error instanceof Error ? error.message : String(error);
848+
this.logger.warn(`Cache operation attempt ${attempt}/${maxRetries} failed: ${errMsg}`);
830849
lastError = error as Error;
831850

832851
if (attempt < maxRetries) {
@@ -884,14 +903,16 @@ export class CacheService {
884903
const refreshedValue = await fallbackFactories[0](); // Use primary source
885904
await this.set(key, refreshedValue, { ttl: options?.ttl });
886905
} catch (refreshError) {
887-
this.logger.error(`Background refresh failed: ${refreshError.message}`);
906+
const errMsg = refreshError instanceof Error ? refreshError.message : String(refreshError);
907+
this.logger.error(`Background refresh failed: ${errMsg}`);
888908
}
889909
});
890910
}
891911

892912
return value;
893913
} catch (error) {
894-
this.logger.warn(`Fallback ${i + 1} failed: ${error.message}`);
914+
const errMsg = error instanceof Error ? error.message : String(error);
915+
this.logger.warn(`Fallback ${i + 1} failed: ${errMsg}`);
895916

896917
// If this was the last fallback, throw the error
897918
if (i === fallbackFactories.length - 1) {

src/common/services/encryption.service.ts

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,9 @@ export class EncryptionService {
6868
authTag: authTag.toString('hex'),
6969
};
7070
} catch (error) {
71-
this.logger.error(`Encryption failed: ${error.message}`);
72-
throw new Error(`Encryption failed: ${error.message}`);
71+
const errMsg = error instanceof Error ? error.message : String(error);
72+
this.logger.error(`Encryption failed: ${errMsg}`);
73+
throw new Error(`Encryption failed: ${errMsg}`);
7374
}
7475
}
7576

@@ -94,8 +95,9 @@ export class EncryptionService {
9495

9596
return decrypted.toString('utf8');
9697
} catch (error) {
97-
this.logger.error(`Decryption failed: ${error.message}`);
98-
throw new Error(`Decryption failed: ${error.message}`);
98+
const errMsg = error instanceof Error ? error.message : String(error);
99+
this.logger.error(`Decryption failed: ${errMsg}`);
100+
throw new Error(`Decryption failed: ${errMsg}`);
99101
}
100102
}
101103

@@ -198,8 +200,9 @@ export class EncryptionService {
198200
authTag,
199201
};
200202
} catch (error) {
201-
this.logger.error(`File encryption failed: ${error.message}`);
202-
throw new Error(`File encryption failed: ${error.message}`);
203+
const errMsg = error instanceof Error ? error.message : String(error);
204+
this.logger.error(`File encryption failed: ${errMsg}`);
205+
throw new Error(`File encryption failed: ${errMsg}`);
203206
}
204207
}
205208

@@ -213,8 +216,9 @@ export class EncryptionService {
213216

214217
return Buffer.concat([decipher.update(encryptedData.encryptedBuffer), decipher.final()]);
215218
} catch (error) {
216-
this.logger.error(`File decryption failed: ${error.message}`);
217-
throw new Error(`File decryption failed: ${error.message}`);
219+
const errMsg = error instanceof Error ? error.message : String(error);
220+
this.logger.error(`File decryption failed: ${errMsg}`);
221+
throw new Error(`File decryption failed: ${errMsg}`);
218222
}
219223
}
220224

@@ -241,8 +245,9 @@ export class EncryptionService {
241245

242246
return sign.sign(privateKey, 'hex');
243247
} catch (error) {
244-
this.logger.error(`Signature creation failed: ${error.message}`);
245-
throw new Error(`Signature creation failed: ${error.message}`);
248+
const errMsg = error instanceof Error ? error.message : String(error);
249+
this.logger.error(`Signature creation failed: ${errMsg}`);
250+
throw new Error(`Signature creation failed: ${errMsg}`);
246251
}
247252
}
248253

@@ -269,7 +274,8 @@ export class EncryptionService {
269274

270275
return verify.verify(publicKey, signature, 'hex');
271276
} catch (error) {
272-
this.logger.error(`Signature verification failed: ${error.message}`);
277+
const errMsg = error instanceof Error ? error.message : String(error);
278+
this.logger.error(`Signature verification failed: ${errMsg}`);
273279
return false;
274280
}
275281
}

src/config/config.loader.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,9 @@ export class ConfigLoader {
9898
try {
9999
processedEnv[key] = ConfigEncryptionUtil.decrypt(value, encryptionKey);
100100
} catch (error) {
101-
console.error(`Failed to decrypt ${key}:`, error.message);
102-
throw new Error(`Failed to decrypt ${key}: ${error.message}`);
101+
const errMsg = error instanceof Error ? error.message : String(error);
102+
console.error(`Failed to decrypt ${key}:`, errMsg);
103+
throw new Error(`Failed to decrypt ${key}: ${errMsg}`);
103104
}
104105
}
105106
}

src/health/indicators/blockchain.health.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ export class BlockchainHealthIndicator extends HealthIndicator {
2727
},
2828
});
2929
} catch (error) {
30-
throw new HealthCheckError('Blockchain connection failed', this.getStatus(key, false, { error: error.message }));
30+
const errMsg = error instanceof Error ? error.message : String(error);
31+
throw new HealthCheckError('Blockchain connection failed', this.getStatus(key, false, { error: errMsg }));
3132
}
3233
}
3334
}

src/health/indicators/database.health.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ export class DatabaseHealthIndicator extends HealthIndicator {
1313
await this.prisma.$queryRaw`SELECT 1`;
1414
return this.getStatus(key, true, { message: 'Database connection successful' });
1515
} catch (error) {
16-
throw new HealthCheckError('Database connection failed', this.getStatus(key, false, { error: error.message }));
16+
const errMsg = error instanceof Error ? error.message : String(error);
17+
throw new HealthCheckError('Database connection failed', this.getStatus(key, false, { error: errMsg }));
1718
}
1819
}
1920
}

src/health/indicators/redis.health.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ export class RedisHealthIndicator extends HealthIndicator {
2626
}
2727
throw new Error('Redis ping failed');
2828
} catch (error) {
29-
throw new HealthCheckError('Redis connection failed', this.getStatus(key, false, { error: error.message }));
29+
const errMsg = error instanceof Error ? error.message : String(error);
30+
throw new HealthCheckError('Redis connection failed', this.getStatus(key, false, { error: errMsg }));
3031
}
3132
}
3233

src/rbac/rbac.service.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ export class RbacService {
7070

7171
return false;
7272
} catch (error) {
73-
this.logger.error('Error checking permission:', error.stack, {
73+
const err = error instanceof Error ? error : new Error(String(error));
74+
this.logger.error('Error checking permission:', err.stack, {
7475
userId,
7576
resource,
7677
action,
@@ -325,7 +326,8 @@ export class RbacService {
325326
return false;
326327
}
327328
} catch (error) {
328-
this.logger.error('Error validating resource ownership:', error.stack, {
329+
const err = error instanceof Error ? error : new Error(String(error));
330+
this.logger.error('Error validating resource ownership:', err.stack, {
329331
userId,
330332
resourceType,
331333
resourceId,

0 commit comments

Comments
 (0)