Skip to content

Commit ff727e3

Browse files
authored
Merge pull request #55 from CastQuest/copilot/fix-typescript-errors-core-services
Fix TypeScript compilation errors in core-services package
2 parents 8c0d12a + 7338a8d commit ff727e3

12 files changed

Lines changed: 258 additions & 56 deletions

File tree

packages/core-services/package.json

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,35 +17,36 @@
1717
"db:reset": "tsx src/lib/db/reset.ts"
1818
},
1919
"dependencies": {
20-
"express": "^4.18.2",
20+
"bcrypt": "^5.1.1",
2121
"cors": "^2.8.5",
22-
"helmet": "^7.1.0",
23-
"express-rate-limit": "^7.1.5",
24-
"pg": "^8.11.3",
22+
"dotenv": "^16.3.1",
2523
"drizzle-orm": "^0.29.3",
26-
"zod": "^3.22.4",
24+
"express": "^4.18.2",
25+
"express-rate-limit": "^7.1.5",
26+
"helmet": "^7.1.0",
2727
"jsonwebtoken": "^9.0.2",
28-
"bcrypt": "^5.1.1",
2928
"nodemailer": "^6.9.8",
29+
"pg": "^8.11.3",
3030
"viem": "^2.7.6",
31-
"dotenv": "^16.3.1",
32-
"winston": "^3.11.0"
31+
"winston": "^3.11.0",
32+
"zod": "^3.22.4"
3333
},
3434
"devDependencies": {
35-
"@types/express": "^4.17.21",
35+
"@types/bcrypt": "^5.0.2",
3636
"@types/cors": "^2.8.17",
37-
"@types/node": "^20.10.6",
37+
"@types/express": "^4.17.21",
3838
"@types/jsonwebtoken": "^9.0.5",
39-
"@types/bcrypt": "^5.0.2",
39+
"@types/node": "^20.10.6",
4040
"@types/nodemailer": "^6.4.14",
41-
"tsx": "^4.7.0",
42-
"typescript": "^5.3.3",
43-
"tsc-alias": "^1.8.8",
44-
"vitest": "^1.1.1",
45-
"eslint": "^8.56.0",
41+
"@types/pg": "^8.16.0",
4642
"@typescript-eslint/eslint-plugin": "^6.18.0",
4743
"@typescript-eslint/parser": "^6.18.0",
48-
"drizzle-kit": "^0.20.9"
44+
"drizzle-kit": "^0.20.9",
45+
"eslint": "^8.56.0",
46+
"tsc-alias": "^1.8.8",
47+
"tsx": "^4.7.0",
48+
"typescript": "^5.3.3",
49+
"vitest": "^1.1.1"
4950
},
5051
"keywords": [
5152
"castquest",

packages/core-services/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export { logger } from './lib/logger';
2525
export { authenticateAdmin, authenticateJWT, optionalAuth } from './lib/middleware/auth';
2626

2727
// Export services (for direct usage in other packages)
28-
export { MarketService } from './modules/markets/service';
28+
export { MarketsService } from './modules/markets/service';
2929
export { MediaService } from './modules/media/service';
3030
export { RiskService } from './modules/risk/service';
3131
export { UserService } from './modules/users/service';

packages/core-services/src/lib/db/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pool.on('connect', () => {
1515
logger.info('Database connection established');
1616
});
1717

18-
pool.on('error', (err) => {
18+
pool.on('error', (err: Error) => {
1919
logger.error('Database connection error:', err);
2020
});
2121

packages/core-services/src/lib/db/schema.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ export const riskAssessments = pgTable('risk_assessments', {
185185
id: uuid('id').primaryKey().defaultRandom(),
186186
tokenAddress: text('token_address').notNull(),
187187
riskScore: integer('risk_score').notNull(),
188+
riskLevel: text('risk_level'), // low, medium, high, critical
188189
confidence: integer('confidence').notNull(),
189190
flags: text('flags').array().notNull(),
190191
reasons: text('reasons').array().notNull(),

packages/core-services/src/modules/risk/routes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Request, Response, Router } from 'express';
22
import { z } from 'zod';
33
import { RiskService } from './service';
44

5-
export const riskRoutes = Router();
5+
export const riskRoutes: Router = Router();
66
const riskService = new RiskService();
77

88
// Validation schemas

packages/core-services/src/modules/risk/service.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,13 @@ export class RiskService {
1818
const [assessment] = await db
1919
.insert(riskAssessments)
2020
.values({
21-
...data,
2221
tokenAddress: data.tokenAddress.toLowerCase(),
22+
riskScore: data.riskScore,
23+
riskLevel: data.riskLevel,
24+
confidence: 85, // Default confidence level
25+
flags: data.recommendations, // Map recommendations to flags
26+
reasons: data.recommendations, // Map recommendations to reasons
27+
assessedBy: data.assessedBy,
2328
assessedAt: new Date(),
2429
})
2530
.returning();
@@ -33,7 +38,7 @@ export class RiskService {
3338
})
3439
.where(eq(mediaMetadata.tokenAddress, data.tokenAddress.toLowerCase()));
3540

36-
return assessment;
41+
return assessment as RiskAssessment;
3742
}
3843

3944
/**
@@ -47,7 +52,7 @@ export class RiskService {
4752
.orderBy(desc(riskAssessments.assessedAt))
4853
.limit(1);
4954

50-
return assessment || null;
55+
return (assessment as RiskAssessment) || null;
5156
}
5257

5358
/**
@@ -64,7 +69,7 @@ export class RiskService {
6469
.where(eq(riskAssessments.tokenAddress, tokenAddress.toLowerCase()))
6570
.orderBy(desc(riskAssessments.assessedAt))
6671
.limit(limit)
67-
.offset(offset);
72+
.offset(offset) as Promise<RiskAssessment[]>;
6873
}
6974

7075
/**
@@ -77,7 +82,7 @@ export class RiskService {
7782
.where(gte(riskAssessments.riskScore, 70))
7883
.orderBy(desc(riskAssessments.riskScore), desc(riskAssessments.assessedAt))
7984
.limit(limit)
80-
.offset(offset);
85+
.offset(offset) as Promise<RiskAssessment[]>;
8186
}
8287

8388
/**
@@ -94,7 +99,7 @@ export class RiskService {
9499
.where(eq(riskAssessments.riskLevel, riskLevel))
95100
.orderBy(desc(riskAssessments.assessedAt))
96101
.limit(limit)
97-
.offset(offset);
102+
.offset(offset) as Promise<RiskAssessment[]>;
98103
}
99104

100105
/**
@@ -231,7 +236,9 @@ export class RiskService {
231236
};
232237

233238
levelCounts.forEach((row) => {
234-
byLevel[row.level] = row.count;
239+
if (row.level) {
240+
byLevel[row.level] = row.count;
241+
}
235242
});
236243

237244
// Get average risk score
@@ -250,7 +257,7 @@ export class RiskService {
250257
.from(mediaMetadata);
251258

252259
return {
253-
totalAssessments: Object.values(byLevel).reduce((a: number, b: number) => a + b, 0),
260+
totalAssessments: (Object.values(byLevel) as number[]).reduce((a, b) => a + b, 0),
254261
byLevel,
255262
averageRiskScore: parseFloat(avgScore?.avg?.toString() || '0'),
256263
flaggedCount: statusCounts?.flagged || 0,

packages/core-services/src/modules/users/routes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Request, Response, Router } from 'express';
33
import { z } from 'zod';
44
import { UserService } from './service';
55

6-
const router = Router();
6+
const router: Router = Router();
77
const userService = new UserService();
88

99
// ============================================================================

packages/core-services/src/modules/users/service.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,12 @@ export class UserService {
8787
.where(eq(users.id, user.id));
8888

8989
// Generate JWT
90+
const jwtSecret = config.auth.jwtSecret as string;
91+
const jwtExpiresIn = config.auth.jwtExpiresIn as string;
9092
const token = jwt.sign(
9193
{ userId: user.id, email: user.email },
92-
config.auth.jwtSecret,
93-
{ expiresIn: config.auth.jwtExpiresIn }
94+
jwtSecret,
95+
{ expiresIn: jwtExpiresIn } as jwt.SignOptions
9496
);
9597

9698
logger.info(`User logged in: ${user.id}`);

packages/core-services/src/modules/wallets/routes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Request, Response, Router } from 'express';
33
import { z } from 'zod';
44
import { WalletService } from './service';
55

6-
const router = Router();
6+
const router: Router = Router();
77
const walletService = new WalletService();
88

99
// ============================================================================

packages/core-services/src/types/index.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -178,23 +178,35 @@ export interface Trade {
178178
// Risk & Abuse Domain
179179
// ============================================================================
180180

181+
export type RiskFlag =
182+
| 'WASH_TRADING'
183+
| 'PUMP_AND_DUMP'
184+
| 'LOW_LIQUIDITY'
185+
| 'SUSPICIOUS_VOLUME'
186+
| 'PRICE_MANIPULATION'
187+
| 'SPAM_TOKEN'
188+
| 'RUG_PULL_RISK'
189+
| 'HONEYPOT'
190+
| 'HIGH_CONCENTRATION'
191+
| 'nsfw'
192+
| 'spam'
193+
| 'copyright'
194+
| 'scam'
195+
| 'duplicate'
196+
| 'low_quality';
197+
181198
export interface RiskAssessment {
199+
id?: string;
182200
tokenAddress: string;
183201
riskScore: number; // 0-100
184202
confidence: number; // 0-100
185-
flags: RiskFlag[];
203+
flags: string[]; // Array of RiskFlag strings
186204
reasons: string[];
205+
riskLevel?: 'low' | 'medium' | 'high' | 'critical' | null;
187206
assessedAt: Date;
188207
assessedBy: 'ai' | 'moderator' | 'community';
189208
}
190209

191-
export interface RiskFlag {
192-
type: 'nsfw' | 'spam' | 'copyright' | 'scam' | 'duplicate' | 'low_quality';
193-
severity: 'low' | 'medium' | 'high' | 'critical';
194-
confidence: number;
195-
details?: string;
196-
}
197-
198210
export interface RateLimit {
199211
identifier: string; // IP or userId
200212
endpoint: string;

0 commit comments

Comments
 (0)