@solidxai/core 0.1.10-beta.0 → 0.1.10-beta.11
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/.claude/settings.local.json +15 -0
- package/CLAUDE.md +18 -0
- package/CURRENT_PROMPT +6 -0
- package/dist/commands/refresh-model.command.d.ts +0 -4
- package/dist/commands/refresh-model.command.d.ts.map +1 -1
- package/dist/commands/refresh-model.command.js +0 -32
- package/dist/commands/refresh-model.command.js.map +1 -1
- package/dist/commands/run-tests.command.d.ts +2 -0
- package/dist/commands/run-tests.command.d.ts.map +1 -1
- package/dist/commands/run-tests.command.js +49 -17
- package/dist/commands/run-tests.command.js.map +1 -1
- package/dist/controllers/action-metadata.controller.js +1 -1
- package/dist/controllers/action-metadata.controller.js.map +1 -1
- package/dist/controllers/facebook-authentication.controller.js +1 -1
- package/dist/controllers/facebook-authentication.controller.js.map +1 -1
- package/dist/controllers/google-authentication.controller.js +1 -1
- package/dist/controllers/google-authentication.controller.js.map +1 -1
- package/dist/controllers/mcp-audit-log.controller.d.ts +35 -0
- package/dist/controllers/mcp-audit-log.controller.d.ts.map +1 -0
- package/dist/controllers/mcp-audit-log.controller.js +147 -0
- package/dist/controllers/mcp-audit-log.controller.js.map +1 -0
- package/dist/controllers/menu-item-metadata.controller.js +1 -1
- package/dist/controllers/menu-item-metadata.controller.js.map +1 -1
- package/dist/controllers/microsoft-authentication.controller.js +1 -1
- package/dist/controllers/microsoft-authentication.controller.js.map +1 -1
- package/dist/controllers/model-metadata.controller.d.ts +1 -1
- package/dist/controllers/model-metadata.controller.js +2 -2
- package/dist/controllers/model-metadata.controller.js.map +1 -1
- package/dist/controllers/module-metadata.controller.js +1 -1
- package/dist/controllers/module-metadata.controller.js.map +1 -1
- package/dist/controllers/mq-message-queue.controller.js +1 -1
- package/dist/controllers/mq-message-queue.controller.js.map +1 -1
- package/dist/controllers/mq-message.controller.js +1 -1
- package/dist/controllers/mq-message.controller.js.map +1 -1
- package/dist/controllers/user.controller.d.ts.map +1 -1
- package/dist/controllers/user.controller.js.map +1 -1
- package/dist/controllers/view-metadata.controller.js +1 -1
- package/dist/controllers/view-metadata.controller.js.map +1 -1
- package/dist/dtos/create-mcp-audit-log.dto.d.ts +19 -0
- package/dist/dtos/create-mcp-audit-log.dto.d.ts.map +1 -0
- package/dist/dtos/create-mcp-audit-log.dto.js +118 -0
- package/dist/dtos/create-mcp-audit-log.dto.js.map +1 -0
- package/dist/dtos/update-mcp-audit-log.dto.d.ts +19 -0
- package/dist/dtos/update-mcp-audit-log.dto.d.ts.map +1 -0
- package/dist/dtos/update-mcp-audit-log.dto.js +117 -0
- package/dist/dtos/update-mcp-audit-log.dto.js.map +1 -0
- package/dist/dtos/update-user.dto.d.ts +1 -0
- package/dist/dtos/update-user.dto.d.ts.map +1 -1
- package/dist/dtos/update-user.dto.js +7 -1
- package/dist/dtos/update-user.dto.js.map +1 -1
- package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message-details.entity.js +0 -1
- package/dist/entities/chatter-message-details.entity.js.map +1 -1
- package/dist/entities/mcp-audit-log.entity.d.ts +19 -0
- package/dist/entities/mcp-audit-log.entity.d.ts.map +1 -0
- package/dist/entities/mcp-audit-log.entity.js +90 -0
- package/dist/entities/mcp-audit-log.entity.js.map +1 -0
- package/dist/entities/user.entity.js +1 -0
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
- package/dist/helpers/bootstrap.helper.js +2 -0
- package/dist/helpers/bootstrap.helper.js.map +1 -1
- package/dist/helpers/command.service.d.ts +1 -0
- package/dist/helpers/command.service.d.ts.map +1 -1
- package/dist/helpers/command.service.js +1 -0
- package/dist/helpers/command.service.js.map +1 -1
- package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js.map +1 -1
- package/dist/helpers/module-metadata-helper.service.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +0 -2
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/chatter-queue-subscriber-database.service.js +3 -3
- package/dist/jobs/database/chatter-queue-subscriber-database.service.js.map +1 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
- package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.js +3 -3
- package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.js.map +1 -1
- package/dist/jobs/redis/chatter-queue-subscriber-redis.service.d.ts.map +1 -1
- package/dist/jobs/redis/chatter-queue-subscriber-redis.service.js +3 -3
- package/dist/jobs/redis/chatter-queue-subscriber-redis.service.js.map +1 -1
- package/dist/repository/mcp-audit-log.repository.d.ts +12 -0
- package/dist/repository/mcp-audit-log.repository.d.ts.map +1 -0
- package/dist/repository/mcp-audit-log.repository.js +34 -0
- package/dist/repository/mcp-audit-log.repository.js.map +1 -0
- package/dist/repository/security-rule.repository.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/module-test-data.service.d.ts +7 -0
- package/dist/seeders/module-test-data.service.d.ts.map +1 -1
- package/dist/seeders/module-test-data.service.js +94 -18
- package/dist/seeders/module-test-data.service.js.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +380 -2
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +5 -5
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts +6 -3
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +23 -35
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/csv.service.js.map +1 -1
- package/dist/services/dashboard.service.js.map +1 -1
- package/dist/services/database/database-bootstrap.service.js.map +1 -1
- package/dist/services/excel.service.js.map +1 -1
- package/dist/services/export-transaction.service.js.map +1 -1
- package/dist/services/field-metadata.service.js +2 -2
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/fixtures.service.js.map +1 -1
- package/dist/services/import-transaction.service.js.map +1 -1
- package/dist/services/list-of-values.service.js.map +1 -1
- package/dist/services/mcp-audit-log.service.d.ts +12 -0
- package/dist/services/mcp-audit-log.service.d.ts.map +1 -0
- package/dist/services/mcp-audit-log.service.js +38 -0
- package/dist/services/mcp-audit-log.service.js.map +1 -0
- package/dist/services/model-metadata.service.d.ts +4 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +23 -24
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/module-metadata.service.d.ts +4 -1
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +18 -2
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/queues/database-publisher.service.js +3 -3
- package/dist/services/queues/database-publisher.service.js.map +1 -1
- package/dist/services/queues/database-subscriber.service.js +3 -3
- package/dist/services/queues/database-subscriber.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-publisher.service.js +3 -3
- package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.js +4 -4
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/services/queues/redis-publisher.service.d.ts.map +1 -1
- package/dist/services/queues/redis-publisher.service.js +4 -1
- package/dist/services/queues/redis-publisher.service.js.map +1 -1
- package/dist/services/queues/redis-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/redis-subscriber.service.js +4 -1
- package/dist/services/queues/redis-subscriber.service.js.map +1 -1
- package/dist/services/role-metadata.service.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
- package/dist/services/settings/default-settings-provider.service.d.ts +58 -8
- package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
- package/dist/services/settings/default-settings-provider.service.js +21 -4
- package/dist/services/settings/default-settings-provider.service.js.map +1 -1
- package/dist/services/sms/TwilioSMSService.js.map +1 -1
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/services/user-activity-history.service.js.map +1 -1
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +17 -2
- package/dist/services/view-metadata.service.js.map +1 -1
- package/dist/solid-core.module.d.ts +1 -0
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +9 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
- package/dist/subscribers/security-rule.subscriber.d.ts.map +1 -1
- package/dist/subscribers/security-rule.subscriber.js.map +1 -1
- package/dist/subscribers/view-metadata.subscriber.js.map +1 -1
- package/dist/testing/core/testing-engine.js.map +1 -1
- package/dist/testing/reporter/console-reporter.d.ts +10 -0
- package/dist/testing/reporter/console-reporter.d.ts.map +1 -1
- package/dist/testing/reporter/console-reporter.js +21 -0
- package/dist/testing/reporter/console-reporter.js.map +1 -1
- package/dist/testing/reporter/reporter.types.d.ts +7 -0
- package/dist/testing/reporter/reporter.types.d.ts.map +1 -1
- package/dist/testing/reporter/reporter.types.js.map +1 -1
- package/dist/testing/reporter/webhook-reporter.d.ts +54 -0
- package/dist/testing/reporter/webhook-reporter.d.ts.map +1 -0
- package/dist/testing/reporter/webhook-reporter.js +74 -0
- package/dist/testing/reporter/webhook-reporter.js.map +1 -0
- package/dist/testing/runner/run-from-metadata.d.ts.map +1 -1
- package/dist/testing/runner/run-from-metadata.js +20 -1
- package/dist/testing/runner/run-from-metadata.js.map +1 -1
- package/package.json +8 -8
- package/src/commands/refresh-model.command.ts +1 -32
- package/src/commands/run-tests.command.ts +45 -17
- package/src/controllers/action-metadata.controller.ts +1 -1
- package/src/controllers/facebook-authentication.controller.ts +1 -1
- package/src/controllers/google-authentication.controller.ts +1 -1
- package/src/controllers/mcp-audit-log.controller.ts +70 -0
- package/src/controllers/menu-item-metadata.controller.ts +1 -1
- package/src/controllers/microsoft-authentication.controller.ts +1 -1
- package/src/controllers/model-metadata.controller.ts +1 -1
- package/src/controllers/module-metadata.controller.ts +1 -1
- package/src/controllers/mq-message-queue.controller.ts +1 -1
- package/src/controllers/mq-message.controller.ts +1 -1
- package/src/controllers/user.controller.ts +16 -16
- package/src/controllers/view-metadata.controller.ts +1 -1
- package/src/dtos/create-mcp-audit-log.dto.ts +84 -0
- package/src/dtos/update-mcp-audit-log.dto.ts +83 -0
- package/src/dtos/update-user.dto.ts +4 -0
- package/src/entities/chatter-message-details.entity.ts +1 -2
- package/src/entities/mcp-audit-log.entity.ts +55 -0
- package/src/entities/user.entity.ts +1 -1
- package/src/helpers/bootstrap.helper.ts +3 -0
- package/src/helpers/command.service.ts +2 -0
- package/src/helpers/field-crud-managers/BigIntFieldCrudManager.ts +1 -1
- package/src/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.ts +1 -1
- package/src/helpers/module-metadata-helper.service.ts +1 -1
- package/src/index.ts +4 -0
- package/src/interfaces.ts +0 -2
- package/src/jobs/database/chatter-queue-subscriber-database.service.ts +4 -2
- package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +1 -1
- package/src/jobs/rabbitmq/chatter-queue-subscriber.service.ts +4 -2
- package/src/jobs/redis/chatter-queue-subscriber-redis.service.ts +10 -3
- package/src/repository/mcp-audit-log.repository.ts +17 -0
- package/src/repository/security-rule.repository.ts +1 -1
- package/src/seeders/module-metadata-seeder.service.ts +4 -4
- package/src/seeders/module-test-data.service.ts +107 -15
- package/src/seeders/permission-metadata-seeder.service.ts +1 -1
- package/src/seeders/seed-data/solid-core-metadata.json +380 -2
- package/src/services/1.js +6 -0
- package/src/services/authentication.service.ts +19 -31
- package/src/services/chatter-message.service.ts +28 -38
- package/src/services/crud.service.ts +3 -3
- package/src/services/csv.service.ts +1 -1
- package/src/services/dashboard.service.ts +1 -1
- package/src/services/database/database-bootstrap.service.ts +1 -1
- package/src/services/excel.service.ts +1 -1
- package/src/services/export-transaction.service.ts +2 -2
- package/src/services/field-metadata.service.ts +3 -3
- package/src/services/fixtures.service.ts +2 -2
- package/src/services/import-transaction.service.ts +2 -2
- package/src/services/list-of-values.service.ts +1 -1
- package/src/services/mcp-audit-log.service.ts +19 -0
- package/src/services/model-metadata.service.ts +35 -34
- package/src/services/module-metadata.service.ts +18 -7
- package/src/services/queues/database-publisher.service.ts +4 -4
- package/src/services/queues/database-subscriber.service.ts +7 -7
- package/src/services/queues/rabbitmq-publisher.service.ts +7 -7
- package/src/services/queues/rabbitmq-subscriber.service.ts +13 -13
- package/src/services/queues/redis-publisher.service.ts +7 -4
- package/src/services/queues/redis-subscriber.service.ts +9 -6
- package/src/services/role-metadata.service.ts +1 -1
- package/src/services/scheduled-jobs/scheduler.service.ts +5 -5
- package/src/services/settings/default-settings-provider.service.ts +21 -4
- package/src/services/sms/TwilioSMSService.ts +2 -2
- package/src/services/solid-introspect.service.ts +2 -2
- package/src/services/user-activity-history.service.ts +1 -1
- package/src/services/view-metadata.service.ts +25 -8
- package/src/solid-core.module.ts +9 -0
- package/src/subscribers/computed-entity-field.subscriber.ts +1 -1
- package/src/subscribers/security-rule.subscriber.ts +8 -8
- package/src/subscribers/view-metadata.subscriber.ts +1 -1
- package/src/testing/core/testing-engine.ts +2 -2
- package/src/testing/reporter/console-reporter.ts +27 -0
- package/src/testing/reporter/reporter.types.ts +7 -0
- package/src/testing/reporter/webhook-reporter.ts +116 -0
- package/src/testing/runner/run-from-metadata.ts +19 -1
- package/dist-tests/api/authenticate.spec.js +0 -119
- package/dist-tests/api/authenticate.spec.js.map +0 -1
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
- package/dist-tests/api/ping.spec.js +0 -21
- package/dist-tests/api/ping.spec.js.map +0 -1
- package/dist-tests/helpers/auth.js +0 -41
- package/dist-tests/helpers/auth.js.map +0 -1
- package/dist-tests/helpers/env.js +0 -11
- package/dist-tests/helpers/env.js.map +0 -1
- package/docs/grouping-enhancements.md +0 -89
- package/docs/java-spring/README.md +0 -3
- package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
- package/docs/seed-changes.md +0 -65
- package/docs/test-data-workflow.md +0 -200
- package/docs/type-declaration-import-issue.md +0 -24
|
@@ -18,7 +18,6 @@ export class ChatterMessageDetails extends CommonEntity {
|
|
|
18
18
|
@Column({ type: "varchar", nullable: true })
|
|
19
19
|
oldValueDisplay: string;
|
|
20
20
|
|
|
21
|
-
@Index()
|
|
22
21
|
@Column({ type: "varchar", nullable: true })
|
|
23
22
|
newValueDisplay: string;
|
|
24
23
|
|
|
@@ -30,4 +29,4 @@ export class ChatterMessageDetails extends CommonEntity {
|
|
|
30
29
|
|
|
31
30
|
@Column({ type: "varchar", nullable: true })
|
|
32
31
|
fieldType: string;
|
|
33
|
-
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Column, Entity, Index } from 'typeorm';
|
|
2
|
+
import { CommonEntity } from 'src/entities/common.entity';
|
|
3
|
+
import { getColumnType } from 'src/helpers/typeorm-db-helper';
|
|
4
|
+
|
|
5
|
+
@Entity({ name: 'ss_mcp_audit_log' })
|
|
6
|
+
export class McpAuditLog extends CommonEntity {
|
|
7
|
+
@Index()
|
|
8
|
+
@Column({ nullable: true })
|
|
9
|
+
userId: number;
|
|
10
|
+
|
|
11
|
+
@Column({ nullable: true })
|
|
12
|
+
apiKeyId: number;
|
|
13
|
+
|
|
14
|
+
@Column({ nullable: true, length: 128 })
|
|
15
|
+
username: string;
|
|
16
|
+
|
|
17
|
+
@Column({ length: 32 })
|
|
18
|
+
transport: string;
|
|
19
|
+
|
|
20
|
+
@Index()
|
|
21
|
+
@Column({ nullable: true, length: 64 })
|
|
22
|
+
mcpSessionId: string;
|
|
23
|
+
|
|
24
|
+
@Column({ nullable: true, length: 64 })
|
|
25
|
+
clientAddr: string;
|
|
26
|
+
|
|
27
|
+
@Index()
|
|
28
|
+
@Column({ length: 64 })
|
|
29
|
+
method: string;
|
|
30
|
+
|
|
31
|
+
@Column({ nullable: true, length: 64 })
|
|
32
|
+
requestId: string;
|
|
33
|
+
|
|
34
|
+
@Index()
|
|
35
|
+
@Column({ nullable: true, length: 128 })
|
|
36
|
+
toolName: string;
|
|
37
|
+
|
|
38
|
+
@Column({ nullable: true, ...getColumnType('longText') })
|
|
39
|
+
requestParams: string;
|
|
40
|
+
|
|
41
|
+
@Column({ length: 16 })
|
|
42
|
+
status: string;
|
|
43
|
+
|
|
44
|
+
@Column({ nullable: true, ...getColumnType('longText') })
|
|
45
|
+
responseResult: string;
|
|
46
|
+
|
|
47
|
+
@Column({ nullable: true })
|
|
48
|
+
errorCode: number;
|
|
49
|
+
|
|
50
|
+
@Column({ nullable: true, ...getColumnType('longText') })
|
|
51
|
+
errorMessage: string;
|
|
52
|
+
|
|
53
|
+
@Column({ nullable: true, ...getColumnType('decimal') })
|
|
54
|
+
durationMs: number;
|
|
55
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ValidationPipe } from '@nestjs/common';
|
|
2
2
|
import { NestFactory } from '@nestjs/core';
|
|
3
|
+
import { WsAdapter } from '@nestjs/platform-ws';
|
|
3
4
|
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
|
|
4
5
|
import { NextFunction, Request, Response } from 'express';
|
|
5
6
|
import helmet from 'helmet';
|
|
@@ -178,6 +179,8 @@ export async function bootstrapSolidApp(
|
|
|
178
179
|
const types = require('pg').types;
|
|
179
180
|
types.setTypeParser(types.builtins.INT8, (val: string) => parseInt(val));
|
|
180
181
|
|
|
182
|
+
app.useWebSocketAdapter(new WsAdapter(app));
|
|
183
|
+
|
|
181
184
|
await app.listen(port);
|
|
182
185
|
}
|
|
183
186
|
|
|
@@ -4,6 +4,7 @@ import { spawn } from 'child_process';
|
|
|
4
4
|
export type CommandWithArgs = {
|
|
5
5
|
command: string;
|
|
6
6
|
args: string[];
|
|
7
|
+
cwd?: string;
|
|
7
8
|
};
|
|
8
9
|
|
|
9
10
|
@Injectable()
|
|
@@ -43,6 +44,7 @@ export class CommandService {
|
|
|
43
44
|
const child = spawn(command, spawnArgs, {
|
|
44
45
|
shell: isWindows, // Use shell on Windows to handle .cmd files
|
|
45
46
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
47
|
+
cwd: commandWithArgs.cwd,
|
|
46
48
|
});
|
|
47
49
|
|
|
48
50
|
let stdout = '';
|
|
@@ -20,7 +20,7 @@ export class BigIntFieldCrudManager implements FieldCrudManager {
|
|
|
20
20
|
if (typeof fieldValue === 'string' || typeof fieldValue === 'number') {
|
|
21
21
|
fieldValue = BigInt(fieldValue);
|
|
22
22
|
}
|
|
23
|
-
} catch (err) {
|
|
23
|
+
} catch (err: any) {
|
|
24
24
|
return [{ field: this.options.fieldName, error: 'Invalid numeric value' }];
|
|
25
25
|
}
|
|
26
26
|
}
|
|
@@ -119,7 +119,7 @@ export class SelectionDynamicFieldCrudManager implements FieldCrudManager {
|
|
|
119
119
|
}
|
|
120
120
|
return false;
|
|
121
121
|
}
|
|
122
|
-
catch (error) {
|
|
122
|
+
catch (error: any) {
|
|
123
123
|
// Use the values method as a fallback, if the value method is not implemented
|
|
124
124
|
const values = await providerInstance.values('', ctxt);
|
|
125
125
|
const isValid = values.some(v => v.value === fieldValue);
|
|
@@ -23,7 +23,7 @@ export class ModuleMetadataHelperService {
|
|
|
23
23
|
const fileContent = await fs.readFile(configFilePath, 'utf8');
|
|
24
24
|
return JSON.parse(fileContent);
|
|
25
25
|
}
|
|
26
|
-
catch (error) {
|
|
26
|
+
catch (error: any) {
|
|
27
27
|
this.logger.error(`module metadata configuration non existent at: ${configFilePath}`);
|
|
28
28
|
}
|
|
29
29
|
|
package/src/index.ts
CHANGED
|
@@ -49,6 +49,7 @@ export * from './dtos/create-mq-message-queue.dto'
|
|
|
49
49
|
export * from './dtos/create-mq-message.dto'
|
|
50
50
|
export * from './dtos/create-agent-session.dto'
|
|
51
51
|
export * from './dtos/create-agent-event.dto'
|
|
52
|
+
export * from './dtos/create-mcp-audit-log.dto'
|
|
52
53
|
export * from './dtos/create-scheduled-job.dto'
|
|
53
54
|
export * from './dtos/create-permission-metadata.dto'
|
|
54
55
|
export * from './dtos/create-role-metadata.dto'
|
|
@@ -89,6 +90,7 @@ export * from './dtos/update-mq-message-queue.dto'
|
|
|
89
90
|
export * from './dtos/update-mq-message.dto'
|
|
90
91
|
export * from './dtos/update-agent-session.dto'
|
|
91
92
|
export * from './dtos/update-agent-event.dto'
|
|
93
|
+
export * from './dtos/update-mcp-audit-log.dto'
|
|
92
94
|
export * from './dtos/update-scheduled-job.dto'
|
|
93
95
|
export * from './dtos/update-permission-metadata.dto'
|
|
94
96
|
export * from './dtos/update-role-metadata.dto'
|
|
@@ -122,6 +124,7 @@ export * from './entities/mq-message-queue.entity'
|
|
|
122
124
|
export * from './entities/mq-message.entity'
|
|
123
125
|
export * from './entities/agent-session.entity'
|
|
124
126
|
export * from './entities/agent-event.entity'
|
|
127
|
+
export * from './entities/mcp-audit-log.entity'
|
|
125
128
|
export * from './entities/scheduled-job.entity'
|
|
126
129
|
export * from './entities/permission-metadata.entity'
|
|
127
130
|
export * from './entities/role-metadata.entity'
|
|
@@ -297,6 +300,7 @@ export * from './services/mq-message-queue.service'
|
|
|
297
300
|
export * from './services/mq-message.service'
|
|
298
301
|
export * from './services/agent-session.service'
|
|
299
302
|
export * from './services/agent-event.service'
|
|
303
|
+
export * from './services/mcp-audit-log.service'
|
|
300
304
|
export * from './services/scheduled-job.service'
|
|
301
305
|
export * from './services/pdf.service'
|
|
302
306
|
export * from './services/permission-metadata.service'
|
package/src/interfaces.ts
CHANGED
|
@@ -121,8 +121,6 @@ export interface CodeGenerationOptions {
|
|
|
121
121
|
fieldIdsForRemoval?: number[];
|
|
122
122
|
fieldNamesForRemoval?: string[];
|
|
123
123
|
dryRun?: boolean;
|
|
124
|
-
fieldIdsForRefresh?: number[];
|
|
125
|
-
fieldNamesForRefresh?: string[];
|
|
126
124
|
}
|
|
127
125
|
|
|
128
126
|
export interface TriggerMcpClientOptions {
|
|
@@ -35,7 +35,7 @@ export class ChatterQueueSubscriberDatabase extends DatabaseSubscriber<AuditQueu
|
|
|
35
35
|
|
|
36
36
|
switch (p.eventType) {
|
|
37
37
|
case 'insert':
|
|
38
|
-
await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName);
|
|
38
|
+
await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName, false, p.userId);
|
|
39
39
|
break;
|
|
40
40
|
case 'update':
|
|
41
41
|
await this.chatterMessageService.postAuditMessageOnUpdate(
|
|
@@ -43,10 +43,12 @@ export class ChatterQueueSubscriberDatabase extends DatabaseSubscriber<AuditQueu
|
|
|
43
43
|
p.modelName,
|
|
44
44
|
p.before,
|
|
45
45
|
(p.updatedColumnNames ?? []).map(n => ({ propertyName: n })),
|
|
46
|
+
false,
|
|
47
|
+
p.userId,
|
|
46
48
|
);
|
|
47
49
|
break;
|
|
48
50
|
case 'delete':
|
|
49
|
-
await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before);
|
|
51
|
+
await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before, false, p.userId);
|
|
50
52
|
break;
|
|
51
53
|
}
|
|
52
54
|
}
|
|
@@ -60,7 +60,7 @@ export class TriggerMcpClientSubscriberDatabase extends DatabaseSubscriber<Trigg
|
|
|
60
60
|
// Fallback
|
|
61
61
|
nestedResponse = String(raw);
|
|
62
62
|
}
|
|
63
|
-
} catch (err) {
|
|
63
|
+
} catch (err: any) {
|
|
64
64
|
this.triggerMcpClientSubscriberLogger.error("Error processing AI response:", err);
|
|
65
65
|
nestedResponse = `Error handling response: ${err?.message || String(err)}`;
|
|
66
66
|
}
|
|
@@ -33,7 +33,7 @@ export class ChatterQueueSubscriberRabbitmq extends RabbitMqSubscriber<AuditQueu
|
|
|
33
33
|
|
|
34
34
|
switch (p.eventType) {
|
|
35
35
|
case 'insert':
|
|
36
|
-
await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName);
|
|
36
|
+
await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName, false, p.userId);
|
|
37
37
|
break;
|
|
38
38
|
case 'update':
|
|
39
39
|
await this.chatterMessageService.postAuditMessageOnUpdate(
|
|
@@ -41,10 +41,12 @@ export class ChatterQueueSubscriberRabbitmq extends RabbitMqSubscriber<AuditQueu
|
|
|
41
41
|
p.modelName,
|
|
42
42
|
p.before,
|
|
43
43
|
(p.updatedColumnNames ?? []).map(n => ({ propertyName: n })),
|
|
44
|
+
false,
|
|
45
|
+
p.userId,
|
|
44
46
|
);
|
|
45
47
|
break;
|
|
46
48
|
case 'delete':
|
|
47
|
-
await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before);
|
|
49
|
+
await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before, false, p.userId);
|
|
48
50
|
break;
|
|
49
51
|
}
|
|
50
52
|
}
|
|
@@ -33,13 +33,20 @@ export class ChatterQueueSubscriberRedis extends RedisSubscriber<any> {
|
|
|
33
33
|
|
|
34
34
|
switch (p.eventType) {
|
|
35
35
|
case 'insert':
|
|
36
|
-
await this.chatterMessageService.postAuditMessageOnInsert(p.after,
|
|
36
|
+
await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName, false, p.userId);
|
|
37
37
|
break;
|
|
38
38
|
case 'update':
|
|
39
|
-
await this.chatterMessageService.postAuditMessageOnUpdate(
|
|
39
|
+
await this.chatterMessageService.postAuditMessageOnUpdate(
|
|
40
|
+
p.after,
|
|
41
|
+
p.modelName,
|
|
42
|
+
p.before,
|
|
43
|
+
(p.updatedColumnNames || []).map(n => ({ propertyName: n })),
|
|
44
|
+
false,
|
|
45
|
+
p.userId,
|
|
46
|
+
);
|
|
40
47
|
break;
|
|
41
48
|
case 'delete':
|
|
42
|
-
await this.chatterMessageService.postAuditMessageOnDelete(p.
|
|
49
|
+
await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before, false, p.userId);
|
|
43
50
|
break;
|
|
44
51
|
}
|
|
45
52
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { McpAuditLog } from 'src/entities/mcp-audit-log.entity';
|
|
3
|
+
import { RequestContextService } from 'src/services/request-context.service';
|
|
4
|
+
import { DataSource } from 'typeorm';
|
|
5
|
+
import { SecurityRuleRepository } from './security-rule.repository';
|
|
6
|
+
import { SolidBaseRepository } from './solid-base.repository';
|
|
7
|
+
|
|
8
|
+
@Injectable()
|
|
9
|
+
export class McpAuditLogRepository extends SolidBaseRepository<McpAuditLog> {
|
|
10
|
+
constructor(
|
|
11
|
+
readonly dataSource: DataSource,
|
|
12
|
+
readonly requestContextService: RequestContextService,
|
|
13
|
+
readonly securityRuleRepository: SecurityRuleRepository,
|
|
14
|
+
) {
|
|
15
|
+
super(McpAuditLog, dataSource, requestContextService, securityRuleRepository);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -56,7 +56,7 @@ export class SecurityRuleRepository extends SolidBaseRepository<SecurityRule> {
|
|
|
56
56
|
|
|
57
57
|
evaluatedRules.push(evaluatedRule);
|
|
58
58
|
|
|
59
|
-
} catch (error) {
|
|
59
|
+
} catch (error: any) {
|
|
60
60
|
this.logger.error(`Error parsing security rule: ${rule.securityRuleConfig}`, error);
|
|
61
61
|
this.logger.error(error.stack);
|
|
62
62
|
throw error;
|
|
@@ -238,7 +238,7 @@ export class ModuleMetadataSeederService {
|
|
|
238
238
|
|
|
239
239
|
//FIXME: Handle displaying the created users credentials in a better way.
|
|
240
240
|
// this.logger.log(`Newly created username is: ${usersDetail?.length > 0 ? usersDetail[0]?.username : ''} and password is ${usersDetail?.length > 0 ? usersDetail[0]?.password : ''}`);
|
|
241
|
-
} catch (error) {
|
|
241
|
+
} catch (error: any) {
|
|
242
242
|
this.logSeedFailureForCli(error, {
|
|
243
243
|
moduleName: currentModule,
|
|
244
244
|
step: currentStep,
|
|
@@ -463,7 +463,7 @@ export class ModuleMetadataSeederService {
|
|
|
463
463
|
await this.createPermissionIfNotExists(permissionName);
|
|
464
464
|
}
|
|
465
465
|
|
|
466
|
-
} catch (error) {
|
|
466
|
+
} catch (error: any) {
|
|
467
467
|
this.logger.error(error);
|
|
468
468
|
}
|
|
469
469
|
}
|
|
@@ -544,7 +544,7 @@ export class ModuleMetadataSeederService {
|
|
|
544
544
|
moduleRoot = path.dirname(
|
|
545
545
|
require.resolve('@solidxai/core/package.json'),
|
|
546
546
|
);
|
|
547
|
-
} catch (err) {
|
|
547
|
+
} catch (err: any) {
|
|
548
548
|
this.logger.debug(
|
|
549
549
|
'Could not resolve @solidxai/core from node_modules, assuming local execution',
|
|
550
550
|
);
|
|
@@ -610,7 +610,7 @@ export class ModuleMetadataSeederService {
|
|
|
610
610
|
moduleRoot = path.dirname(
|
|
611
611
|
require.resolve('@solidxai/core/package.json'),
|
|
612
612
|
);
|
|
613
|
-
} catch (err) {
|
|
613
|
+
} catch (err: any) {
|
|
614
614
|
this.logger.debug(
|
|
615
615
|
'Could not resolve @solidxai/core from node_modules, assuming local execution',
|
|
616
616
|
);
|
|
@@ -24,6 +24,7 @@ import { TestingRoleSpec, TestingUserSpec } from 'src/testing/contracts/testing-
|
|
|
24
24
|
@Injectable()
|
|
25
25
|
export class ModuleTestDataService {
|
|
26
26
|
private readonly logger = new Logger(ModuleTestDataService.name);
|
|
27
|
+
private static readonly TEARDOWN_RETRY_ATTEMPTS = 5;
|
|
27
28
|
|
|
28
29
|
constructor(
|
|
29
30
|
private readonly moduleRef: ModuleRef,
|
|
@@ -665,31 +666,122 @@ export class ModuleTestDataService {
|
|
|
665
666
|
private async dropTestDatabaseObjects(databases: Record<string, string>): Promise<void> {
|
|
666
667
|
const entries = Object.entries(databases);
|
|
667
668
|
for (const [dsName, dbName] of entries) {
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
}
|
|
669
|
+
await this.dropTestDatabaseObjectsWithRetry(dsName, dbName);
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
672
|
|
|
673
|
-
|
|
673
|
+
private async dropTestDatabaseObjectsWithRetry(dsName: string, dbName: string): Promise<void> {
|
|
674
|
+
let lastError: unknown;
|
|
675
|
+
|
|
676
|
+
for (let attempt = 1; attempt <= ModuleTestDataService.TEARDOWN_RETRY_ATTEMPTS; attempt += 1) {
|
|
677
|
+
console.log(`Attempting to tear down "${dbName}" on datasource "${dsName}" (${attempt}/${ModuleTestDataService.TEARDOWN_RETRY_ATTEMPTS})...`);
|
|
674
678
|
|
|
675
|
-
const queryRunner = dataSource.createQueryRunner();
|
|
676
679
|
try {
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
await queryRunner.query(`DROP DATABASE IF EXISTS \`${dbName}\``);
|
|
684
|
-
} else {
|
|
685
|
-
throw new Error(`Unsupported database type for test data deletion: ${type}`);
|
|
680
|
+
await this.dropSingleTestDatabaseObject(dsName, dbName);
|
|
681
|
+
return;
|
|
682
|
+
} catch (error) {
|
|
683
|
+
lastError = error;
|
|
684
|
+
if (attempt >= ModuleTestDataService.TEARDOWN_RETRY_ATTEMPTS) {
|
|
685
|
+
throw error;
|
|
686
686
|
}
|
|
687
|
+
|
|
688
|
+
await this.sleep(this.teardownRetryDelayMs(attempt));
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
throw lastError instanceof Error ? lastError : new Error(String(lastError));
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
private teardownRetryDelayMs(attempt: number): number {
|
|
696
|
+
const baseMs = 500;
|
|
697
|
+
const incrementMs = 350;
|
|
698
|
+
const jitterMs = Math.floor(Math.random() * 250);
|
|
699
|
+
return baseMs + ((attempt - 1) * incrementMs) + jitterMs;
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
private async sleep(ms: number): Promise<void> {
|
|
703
|
+
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
private async dropSingleTestDatabaseObject(dsName: string, dbName: string): Promise<void> {
|
|
707
|
+
const dataSource = this.resolveDataSourceByName(dsName);
|
|
708
|
+
|
|
709
|
+
if (dataSource.options.type === 'postgres') {
|
|
710
|
+
await this.dropPostgresDatabase(dataSource, dbName);
|
|
711
|
+
return;
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
if (!dataSource.isInitialized) {
|
|
715
|
+
await dataSource.initialize();
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
const queryRunner = dataSource.createQueryRunner();
|
|
719
|
+
try {
|
|
720
|
+
const type = dataSource.options.type;
|
|
721
|
+
if (type === 'mssql') {
|
|
722
|
+
await this.dropMssqlSchema(queryRunner, dbName);
|
|
723
|
+
} else if (type === 'mysql' || type === 'mariadb') {
|
|
724
|
+
await queryRunner.query(`DROP DATABASE IF EXISTS \`${dbName}\``);
|
|
725
|
+
} else {
|
|
726
|
+
throw new Error(`Unsupported database type for test data deletion: ${type}`);
|
|
727
|
+
}
|
|
728
|
+
} finally {
|
|
729
|
+
await queryRunner.release();
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
private async dropPostgresDatabase(dataSource: DataSource, dbName: string): Promise<void> {
|
|
734
|
+
if (dataSource.isInitialized) {
|
|
735
|
+
await dataSource.destroy();
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
const adminDataSource = new DataSource({
|
|
739
|
+
...(dataSource.options as any),
|
|
740
|
+
database: this.resolvePostgresMaintenanceDatabase(dataSource),
|
|
741
|
+
name: `${String(dataSource.name ?? 'default')}_teardown_admin_${Date.now()}`,
|
|
742
|
+
synchronize: false,
|
|
743
|
+
migrationsRun: false,
|
|
744
|
+
entities: [],
|
|
745
|
+
subscribers: [],
|
|
746
|
+
migrations: [],
|
|
747
|
+
});
|
|
748
|
+
|
|
749
|
+
try {
|
|
750
|
+
await adminDataSource.initialize();
|
|
751
|
+
const queryRunner = adminDataSource.createQueryRunner();
|
|
752
|
+
try {
|
|
753
|
+
await queryRunner.query(
|
|
754
|
+
`SELECT pg_terminate_backend(pid)
|
|
755
|
+
FROM pg_stat_activity
|
|
756
|
+
WHERE datname = $1
|
|
757
|
+
AND pid <> pg_backend_pid()`,
|
|
758
|
+
[dbName],
|
|
759
|
+
);
|
|
760
|
+
await queryRunner.query(`DROP DATABASE IF EXISTS "${dbName}"`);
|
|
687
761
|
} finally {
|
|
688
762
|
await queryRunner.release();
|
|
689
763
|
}
|
|
764
|
+
} finally {
|
|
765
|
+
if (adminDataSource.isInitialized) {
|
|
766
|
+
await adminDataSource.destroy();
|
|
767
|
+
}
|
|
690
768
|
}
|
|
691
769
|
}
|
|
692
770
|
|
|
771
|
+
private resolvePostgresMaintenanceDatabase(dataSource: DataSource): string {
|
|
772
|
+
const configured = process.env.POSTGRES_MAINTENANCE_DATABASE?.trim();
|
|
773
|
+
if (configured) {
|
|
774
|
+
return configured;
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
const currentDb = String((dataSource.options as any)?.database ?? '').trim();
|
|
778
|
+
if (currentDb && currentDb !== 'postgres') {
|
|
779
|
+
return 'postgres';
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
return 'template1';
|
|
783
|
+
}
|
|
784
|
+
|
|
693
785
|
private async dropMssqlSchema(queryRunner: ReturnType<DataSource['createQueryRunner']>, schemaName: string): Promise<void> {
|
|
694
786
|
const foreignKeys: Array<{ fk_name: string; table_name: string }> = await queryRunner.query(
|
|
695
787
|
`SELECT fk.name AS fk_name, t.name AS table_name
|