Skip to content

Commit bf22033

Browse files
Merge branch 'feature/frontend-charts' of https://github.com/rocket-admin/rocketadmin into feature/frontend-charts
2 parents b50792e + 04db354 commit bf22033

28 files changed

Lines changed: 2996 additions & 2990 deletions

autoadmin-ws-server/package.json

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
{
2-
"name": "rocketadmin-ws-server",
3-
"version": "1.0.0",
4-
"type": "module",
5-
"license": "UNLICENSED",
6-
"scripts": {
7-
"dev": "tsx watch src/index.ts",
8-
"build": "tsc",
9-
"start": "node dist/index.js",
10-
"lint": "biome check src/",
11-
"lint:fix": "biome check --write src/"
12-
},
13-
"dependencies": {
14-
"@hono/node-server": "^1.19.9",
15-
"hono": "^4.11.7",
16-
"jsonwebtoken": "^9.0.3",
17-
"lru-cache": "^11.2.5",
18-
"nanoid": "^5.1.6",
19-
"pino": "^10.3.0",
20-
"ws": "^8.19.0",
21-
"zod": "^4.3.6"
22-
},
23-
"devDependencies": {
24-
"@biomejs/biome": "2.3.13",
25-
"@types/jsonwebtoken": "^9.0.10",
26-
"@types/node": "^22.10.2",
27-
"@types/ws": "^8.18.1",
28-
"tsx": "^4.21.0",
29-
"typescript": "^5.9.3"
30-
}
2+
"name": "rocketadmin-ws-server",
3+
"version": "1.0.0",
4+
"type": "module",
5+
"license": "UNLICENSED",
6+
"scripts": {
7+
"dev": "tsx watch src/index.ts",
8+
"build": "tsc",
9+
"start": "node dist/index.js",
10+
"lint": "biome check src/",
11+
"lint:fix": "biome check --write src/"
12+
},
13+
"dependencies": {
14+
"@hono/node-server": "^1.19.9",
15+
"hono": "^4.11.7",
16+
"jsonwebtoken": "^9.0.3",
17+
"lru-cache": "^11.2.5",
18+
"nanoid": "^5.1.6",
19+
"pino": "^10.3.0",
20+
"ws": "^8.19.0",
21+
"zod": "^4.3.6"
22+
},
23+
"devDependencies": {
24+
"@biomejs/biome": "2.3.13",
25+
"@types/jsonwebtoken": "^9.0.10",
26+
"@types/node": "^22.10.2",
27+
"@types/ws": "^8.18.1",
28+
"tsx": "^4.21.0",
29+
"typescript": "^5.9.3"
30+
}
3131
}

autoadmin-ws-server/src/utils/jwt.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ export function signToken(connectionToken: string): Promise<string> {
1313
if (err) {
1414
return reject(err);
1515
}
16-
if (!token) {
17-
16+
if (!token) {
1817
return reject(new Error('Failed to sign token'));
1918
}
2019
return resolve(token);

autoadmin-ws-server/tsconfig.json

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
{
2-
"compilerOptions": {
3-
"target": "ES2022",
4-
"module": "NodeNext",
5-
"moduleResolution": "NodeNext",
6-
"lib": ["ES2022"],
7-
"outDir": "./dist",
8-
"rootDir": "./src",
9-
"strict": true,
10-
"esModuleInterop": true,
11-
"skipLibCheck": true,
12-
"forceConsistentCasingInFileNames": true,
13-
"resolveJsonModule": true,
14-
"declaration": true,
15-
"declarationMap": true,
16-
"sourceMap": true,
17-
"noUnusedLocals": false,
18-
"noUnusedParameters": false,
19-
"noImplicitReturns": true,
20-
"noFallthroughCasesInSwitch": true
21-
},
22-
"include": ["src/**/*"],
23-
"exclude": ["node_modules", "dist"]
2+
"compilerOptions": {
3+
"target": "ES2022",
4+
"module": "NodeNext",
5+
"moduleResolution": "NodeNext",
6+
"lib": ["ES2022"],
7+
"outDir": "./dist",
8+
"rootDir": "./src",
9+
"strict": true,
10+
"esModuleInterop": true,
11+
"skipLibCheck": true,
12+
"forceConsistentCasingInFileNames": true,
13+
"resolveJsonModule": true,
14+
"declaration": true,
15+
"declarationMap": true,
16+
"sourceMap": true,
17+
"noUnusedLocals": false,
18+
"noUnusedParameters": false,
19+
"noImplicitReturns": true,
20+
"noFallthroughCasesInSwitch": true
21+
},
22+
"include": ["src/**/*"],
23+
"exclude": ["node_modules", "dist"]
2424
}

backend/src/authorization/auth-with-api.middleware.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ import {
88
UnauthorizedException,
99
} from '@nestjs/common';
1010
import { InjectRepository } from '@nestjs/typeorm';
11-
import { UserEntity } from '../entities/user/user.entity.js';
12-
import { Repository } from 'typeorm';
11+
import Sentry from '@sentry/minimal';
1312
import { Request, Response } from 'express';
14-
import { Constants } from '../helpers/constants/constants.js';
15-
import { isObjectEmpty } from '../helpers/is-object-empty.js';
13+
import jwt from 'jsonwebtoken';
14+
import { Repository } from 'typeorm';
1615
import { JwtScopesEnum } from '../entities/user/enums/jwt-scopes.enum.js';
16+
import { UserEntity } from '../entities/user/user.entity.js';
17+
import { EncryptionAlgorithmEnum } from '../enums/encryption-algorithm.enum.js';
1718
import { Messages } from '../exceptions/text/messages.js';
18-
import jwt from 'jsonwebtoken';
19-
import Sentry from '@sentry/minimal';
19+
import { Constants } from '../helpers/constants/constants.js';
2020
import { Encryptor } from '../helpers/encryption/encryptor.js';
21-
import { EncryptionAlgorithmEnum } from '../enums/encryption-algorithm.enum.js';
21+
import { isObjectEmpty } from '../helpers/is-object-empty.js';
2222
import { IRequestWithCognitoInfo } from './cognito-decoded.interface.js';
2323

2424
@Injectable()

backend/src/authorization/auth.middleware.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@ import {
77
UnauthorizedException,
88
} from '@nestjs/common';
99
import { InjectRepository } from '@nestjs/typeorm';
10+
import Sentry from '@sentry/minimal';
1011
import { Response } from 'express';
1112
import jwt from 'jsonwebtoken';
1213
import { Repository } from 'typeorm';
1314
import { LogOutEntity } from '../entities/log-out/log-out.entity.js';
15+
import { JwtScopesEnum } from '../entities/user/enums/jwt-scopes.enum.js';
1416
import { UserEntity } from '../entities/user/user.entity.js';
1517
import { Messages } from '../exceptions/text/messages.js';
16-
import { isObjectEmpty } from '../helpers/index.js';
1718
import { Constants } from '../helpers/constants/constants.js';
18-
import Sentry from '@sentry/minimal';
19-
import { JwtScopesEnum } from '../entities/user/enums/jwt-scopes.enum.js';
19+
import { isObjectEmpty } from '../helpers/index.js';
2020
import { IRequestWithCognitoInfo } from './cognito-decoded.interface.js';
2121

2222
@Injectable()
Lines changed: 66 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,76 @@
1+
import { ConnectionTypeTestEnum } from '@rocketadmin/shared-code/dist/src/shared/enums/connection-types-enum.js';
12
import { nanoid } from 'nanoid';
23
import { ConnectionEntity } from '../../connection/connection.entity.js';
34
import { AgentEntity } from '../agent.entity.js';
4-
import { ConnectionTypeTestEnum } from '@rocketadmin/shared-code/dist/src/shared/enums/connection-types-enum.js';
55

66
export const customAgentRepositoryExtension = {
7-
async saveNewAgent(agent: AgentEntity): Promise<AgentEntity> {
8-
return await this.save(agent);
9-
},
7+
async saveNewAgent(agent: AgentEntity): Promise<AgentEntity> {
8+
return await this.save(agent);
9+
},
1010

11-
async createNewAgentForConnectionAndReturnToken(connection: ConnectionEntity): Promise<string> {
12-
const newAgent = await this.createNewAgentForConnection(connection);
13-
return newAgent.token;
14-
},
11+
async createNewAgentForConnectionAndReturnToken(connection: ConnectionEntity): Promise<string> {
12+
const newAgent = await this.createNewAgentForConnection(connection);
13+
return newAgent.token;
14+
},
1515

16-
async createNewAgentForConnection(connection: ConnectionEntity): Promise<AgentEntity> {
17-
const agent = new AgentEntity();
18-
let token = nanoid(64);
19-
if (process.env.NODE_ENV !== 'test') {
20-
agent.token = token;
21-
} else {
22-
token = this.getTestAgentToken(connection.type);
23-
agent.token = token;
24-
}
25-
agent.connection = connection;
26-
const savedAgent = await this.save(agent);
27-
savedAgent.token = token;
28-
return savedAgent;
29-
},
16+
async createNewAgentForConnection(connection: ConnectionEntity): Promise<AgentEntity> {
17+
const agent = new AgentEntity();
18+
let token = nanoid(64);
19+
if (process.env.NODE_ENV !== 'test') {
20+
agent.token = token;
21+
} else {
22+
token = this.getTestAgentToken(connection.type);
23+
agent.token = token;
24+
}
25+
agent.connection = connection;
26+
const savedAgent = await this.save(agent);
27+
savedAgent.token = token;
28+
return savedAgent;
29+
},
3030

31-
async renewOrCreateConnectionToken(connectionId: string): Promise<string> {
32-
const agentQb = this.createQueryBuilder('agent')
33-
.leftJoinAndSelect('agent.connection', 'connection')
34-
.andWhere('connection.id = :connectionId', { connectionId: connectionId });
35-
const foundAgent = await agentQb.getOne();
36-
if (!foundAgent) {
37-
const connectionQb = this.manager
38-
.getRepository(ConnectionEntity)
39-
.createQueryBuilder('connection')
40-
.andWhere('connection.id = :connectionId', { connectionId: connectionId });
41-
const foundConnection = await connectionQb.getOne();
42-
return await this.createNewAgentForConnectionAndReturnToken(foundConnection);
43-
} else {
44-
const newToken = nanoid(64);
45-
foundAgent.token = newToken;
46-
await this.save(foundAgent);
47-
return newToken;
48-
}
49-
},
31+
async renewOrCreateConnectionToken(connectionId: string): Promise<string> {
32+
const agentQb = this.createQueryBuilder('agent')
33+
.leftJoinAndSelect('agent.connection', 'connection')
34+
.andWhere('connection.id = :connectionId', { connectionId: connectionId });
35+
const foundAgent = await agentQb.getOne();
36+
if (!foundAgent) {
37+
const connectionQb = this.manager
38+
.getRepository(ConnectionEntity)
39+
.createQueryBuilder('connection')
40+
.andWhere('connection.id = :connectionId', { connectionId: connectionId });
41+
const foundConnection = await connectionQb.getOne();
42+
return await this.createNewAgentForConnectionAndReturnToken(foundConnection);
43+
} else {
44+
const newToken = nanoid(64);
45+
foundAgent.token = newToken;
46+
await this.save(foundAgent);
47+
return newToken;
48+
}
49+
},
5050

51-
getTestAgentToken(connectionType: ConnectionTypeTestEnum): string {
52-
if (process.env.NODE_ENV !== 'test') throw new Error('Test agent token can only be used in test environment');
53-
switch (connectionType) {
54-
case ConnectionTypeTestEnum.agent_oracledb:
55-
return 'ORACLE-TEST-AGENT-TOKEN';
56-
case ConnectionTypeTestEnum.agent_mssql:
57-
return 'MSSQL-TEST-AGENT-TOKEN';
58-
case ConnectionTypeTestEnum.agent_mysql:
59-
return 'MYSQL-TEST-AGENT-TOKEN';
60-
case ConnectionTypeTestEnum.agent_postgres:
61-
return 'POSTGRES-TEST-AGENT-TOKEN';
62-
case ConnectionTypeTestEnum.agent_ibmdb2:
63-
return 'IBMDB2-TEST-AGENT-TOKEN';
64-
case ConnectionTypeTestEnum.agent_mongodb:
65-
return 'MONGODB-TEST-AGENT-TOKEN';
66-
case ConnectionTypeTestEnum.agent_redis:
67-
return 'REDIS-TEST-AGENT-TOKEN';
68-
case ConnectionTypeTestEnum.agent_cassandra:
69-
return 'CASSANDRA-TEST-AGENT-TOKEN';
70-
case ConnectionTypeTestEnum.agent_clickhouse:
71-
return 'CLICKHOUSE-TEST-AGENT-TOKEN';
72-
default:
73-
throw new Error(`Unsupported connection type for test agent token: ${connectionType}`);
74-
}
75-
},
51+
getTestAgentToken(connectionType: ConnectionTypeTestEnum): string {
52+
if (process.env.NODE_ENV !== 'test') throw new Error('Test agent token can only be used in test environment');
53+
switch (connectionType) {
54+
case ConnectionTypeTestEnum.agent_oracledb:
55+
return 'ORACLE-TEST-AGENT-TOKEN';
56+
case ConnectionTypeTestEnum.agent_mssql:
57+
return 'MSSQL-TEST-AGENT-TOKEN';
58+
case ConnectionTypeTestEnum.agent_mysql:
59+
return 'MYSQL-TEST-AGENT-TOKEN';
60+
case ConnectionTypeTestEnum.agent_postgres:
61+
return 'POSTGRES-TEST-AGENT-TOKEN';
62+
case ConnectionTypeTestEnum.agent_ibmdb2:
63+
return 'IBMDB2-TEST-AGENT-TOKEN';
64+
case ConnectionTypeTestEnum.agent_mongodb:
65+
return 'MONGODB-TEST-AGENT-TOKEN';
66+
case ConnectionTypeTestEnum.agent_redis:
67+
return 'REDIS-TEST-AGENT-TOKEN';
68+
case ConnectionTypeTestEnum.agent_cassandra:
69+
return 'CASSANDRA-TEST-AGENT-TOKEN';
70+
case ConnectionTypeTestEnum.agent_clickhouse:
71+
return 'CLICKHOUSE-TEST-AGENT-TOKEN';
72+
default:
73+
throw new Error(`Unsupported connection type for test agent token: ${connectionType}`);
74+
}
75+
},
7676
};

backend/src/entities/ai/ai.service.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { Injectable } from '@nestjs/common';
2-
import { WidgetTypeEnum } from '../../enums/widget-type.enum.js';
2+
import { AICoreService, AIProviderType, cleanAIJsonResponse } from '../../ai-core/index.js';
33
import { QueryOrderingEnum } from '../../enums/query-ordering.enum.js';
4+
import { WidgetTypeEnum } from '../../enums/widget-type.enum.js';
45
import { checkFieldAutoincrement } from '../../helpers/check-field-autoincrement.js';
6+
import { TableSettingsEntity } from '../table-settings/common-table-settings/table-settings.entity.js';
57
import { TableWidgetEntity } from '../widget/table-widget.entity.js';
68
import { TableInformation } from './ai-data-entities/types/ai-module-types.js';
7-
import { TableSettingsEntity } from '../table-settings/common-table-settings/table-settings.entity.js';
8-
import { AICoreService, AIProviderType, cleanAIJsonResponse } from '../../ai-core/index.js';
99

1010
interface AIGeneratedWidgetParams {
1111
options?: Array<{ value: string; label: string; background_color?: string }>;

backend/src/entities/shared-jobs/shared-jobs.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ import { isTest } from '../../helpers/app/is-test.js';
1313
import { ValidationHelper } from '../../helpers/validators/validation-helper.js';
1414
import { AiService } from '../ai/ai.service.js';
1515
import { ConnectionEntity } from '../connection/connection.entity.js';
16+
import { TableSettingsEntity } from '../table-settings/common-table-settings/table-settings.entity.js';
1617
import { buildEmptyTableSettings } from '../table-settings/common-table-settings/utils/build-empty-table-settings.js';
1718
import { buildNewTableSettingsEntity } from '../table-settings/common-table-settings/utils/build-new-table-settings-entity.js';
1819
import { TableWidgetEntity } from '../widget/table-widget.entity.js';
19-
import { TableSettingsEntity } from '../table-settings/common-table-settings/table-settings.entity.js';
2020

2121
@Injectable()
2222
export class SharedJobsService {

backend/src/entities/table-settings/common-table-settings/table-settings.entity.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import {
1111
Unique,
1212
UpdateDateColumn,
1313
} from 'typeorm';
14+
import { QueryOrderingEnum } from '../../../enums/query-ordering.enum.js';
1415
import { ConnectionEntity } from '../../connection/connection.entity.js';
1516
import { CustomFieldsEntity } from '../../custom-field/custom-fields.entity.js';
1617
import { TableActionEntity } from '../../table-actions/table-actions-module/table-action.entity.js';
1718
import { TableWidgetEntity } from '../../widget/table-widget.entity.js';
18-
import { QueryOrderingEnum } from '../../../enums/query-ordering.enum.js';
1919

2020
@Entity('tableSettings')
2121
@Unique(['connection_id', 'table_name'])

0 commit comments

Comments
 (0)