Skip to content

Commit a9ae8d3

Browse files
Merge pull request #156 from objectstack-ai/copilot/update-ci-pipeline-configuration
2 parents f55d5cf + c8ee38b commit a9ae8d3

File tree

8 files changed

+60
-6
lines changed

8 files changed

+60
-6
lines changed

packages/plugins/server/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,11 @@
3737
"@nestjs/cli": "^10.0.0",
3838
"@nestjs/schematics": "^10.0.0",
3939
"@nestjs/testing": "^10.0.0",
40+
"@types/better-sqlite3": "^7.6.11",
4041
"@types/express": "^5.0.6",
4142
"@types/jest": "^30.0.0",
4243
"@types/node": "^20.10.0",
44+
"@types/pg": "^8.11.10",
4345
"jest": "^30.2.0",
4446
"source-map-support": "^0.5.21",
4547
"ts-jest": "^29.4.6",
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
import { Controller, All, Req, Res } from '@nestjs/common';
2+
import { Request, Response } from 'express';
23
import { getAuth } from './auth.client.js';
34

45
@Controller('api/auth')
56
export class AuthController {
67
@All('*')
7-
async handleAuth(@Req() req, @Res() res) {
8+
async handleAuth(@Req() req: Request, @Res() res: Response) {
89
try {
910
const auth = await getAuth();
1011
const { toNodeHandler } = await import('better-auth/node');
1112
return toNodeHandler(auth)(req, res);
1213
} catch (error) {
1314
console.error('Auth Error:', error);
14-
res.status(500).json({ error: 'Internal Server Error', details: error.message });
15+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
16+
res.status(500).json({ error: 'Internal Server Error', details: errorMessage });
1517
}
1618
}
1719
}

packages/plugins/server/src/auth/auth.middleware.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Injectable, NestMiddleware } from '@nestjs/common';
22
import { Request, Response, NextFunction } from 'express';
33
import { getAuth } from './auth.client.js';
4+
import './express.d.ts';
45

56
@Injectable()
67
export class AuthMiddleware implements NestMiddleware {
@@ -26,7 +27,7 @@ export class AuthMiddleware implements NestMiddleware {
2627
// Ensure we have an array of roles. better-auth usually provides a single role string on user object.
2728
const roles = [role];
2829

29-
req['user'] = {
30+
req.user = {
3031
userId: session.user.id,
3132
id: session.user.id,
3233
...session.user,
@@ -40,7 +41,7 @@ export class AuthMiddleware implements NestMiddleware {
4041
// Fallback for dev/test: trust x-user-id header
4142
const userId = req.headers['x-user-id'] as string;
4243
const isAdmin = userId === 'admin';
43-
req['user'] = {
44+
req.user = {
4445
userId: userId,
4546
id: userId,
4647
roles: isAdmin ? ['admin'] : ['user'],
@@ -49,15 +50,15 @@ export class AuthMiddleware implements NestMiddleware {
4950
};
5051
} else {
5152
// Anonymous user
52-
req['user'] = {
53+
req.user = {
5354
roles: ['guest'],
5455
isSystem: false
5556
};
5657
}
5758
} catch (e) {
5859
// ignore auth error
5960
console.error("Auth Middleware Error:", e);
60-
req['user'] = {
61+
req.user = {
6162
roles: ['guest'],
6263
isSystem: false
6364
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Type augmentation for Express Request
2+
declare namespace Express {
3+
export interface Request {
4+
user?: {
5+
userId?: string;
6+
id?: string;
7+
roles?: string[];
8+
spaceId?: string;
9+
sessionId?: string;
10+
isSystem?: boolean;
11+
[key: string]: any;
12+
};
13+
}
14+
}

packages/runtime/src/kernel.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ export class ObjectKernel {
3232
constructor() {
3333
this.logger = createLogger('ObjectKernel');
3434
this.context = new PluginContextImpl(this.logger);
35+
// Set the kernel reference in the context
36+
this.context.setKernel(this);
3537
}
3638

3739
/**

packages/runtime/src/plugin-context.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export class PluginContextImpl implements PluginContext {
88
private services: Map<string, any> = new Map();
99
private hooks: Map<string, Function[]> = new Map();
1010
public logger: Logger;
11+
private kernel?: any;
1112

1213
constructor(
1314
logger: Logger,
@@ -91,4 +92,18 @@ export class PluginContextImpl implements PluginContext {
9192
getHooks(): Map<string, Function[]> {
9293
return this.hooks;
9394
}
95+
96+
/**
97+
* Get the kernel instance (for advanced use cases)
98+
*/
99+
getKernel(): any {
100+
return this.kernel;
101+
}
102+
103+
/**
104+
* Set the kernel instance (for internal use)
105+
*/
106+
setKernel(kernel: any): void {
107+
this.kernel = kernel;
108+
}
94109
}

packages/runtime/src/types.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ export interface PluginContext {
2525
getService<T = any>(name: string): T;
2626
hasService(name: string): boolean;
2727

28+
/**
29+
* Get all registered services
30+
*/
31+
getServices(): Map<string, any>;
32+
2833
/**
2934
* Event System (Hook System)
3035
*/
@@ -35,6 +40,13 @@ export interface PluginContext {
3540
* Logger
3641
*/
3742
logger: Logger;
43+
44+
/**
45+
* Get the kernel instance (for advanced use cases)
46+
* @returns Kernel instance
47+
* @note Returns 'any' to avoid circular dependency with ObjectKernel
48+
*/
49+
getKernel(): any;
3850
}
3951

4052
/**

pnpm-lock.yaml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)