@solidxai/core 0.1.8-beta.0 → 0.1.8-beta.2

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.
Files changed (106) hide show
  1. package/dist/controllers/agent-event.controller.d.ts +35 -0
  2. package/dist/controllers/agent-event.controller.d.ts.map +1 -0
  3. package/dist/controllers/agent-event.controller.js +147 -0
  4. package/dist/controllers/agent-event.controller.js.map +1 -0
  5. package/dist/controllers/agent-session.controller.d.ts +35 -0
  6. package/dist/controllers/agent-session.controller.d.ts.map +1 -0
  7. package/dist/controllers/agent-session.controller.js +147 -0
  8. package/dist/controllers/agent-session.controller.js.map +1 -0
  9. package/dist/dtos/create-agent-event.dto.d.ts +19 -0
  10. package/dist/dtos/create-agent-event.dto.d.ts.map +1 -0
  11. package/dist/dtos/create-agent-event.dto.js +118 -0
  12. package/dist/dtos/create-agent-event.dto.js.map +1 -0
  13. package/dist/dtos/create-agent-session.dto.d.ts +15 -0
  14. package/dist/dtos/create-agent-session.dto.d.ts.map +1 -0
  15. package/dist/dtos/create-agent-session.dto.js +94 -0
  16. package/dist/dtos/create-agent-session.dto.js.map +1 -0
  17. package/dist/dtos/update-agent-event.dto.d.ts +19 -0
  18. package/dist/dtos/update-agent-event.dto.d.ts.map +1 -0
  19. package/dist/dtos/update-agent-event.dto.js +117 -0
  20. package/dist/dtos/update-agent-event.dto.js.map +1 -0
  21. package/dist/dtos/update-agent-session.dto.d.ts +15 -0
  22. package/dist/dtos/update-agent-session.dto.d.ts.map +1 -0
  23. package/dist/dtos/update-agent-session.dto.js +93 -0
  24. package/dist/dtos/update-agent-session.dto.js.map +1 -0
  25. package/dist/entities/agent-event.entity.d.ts +28 -0
  26. package/dist/entities/agent-event.entity.d.ts.map +1 -0
  27. package/dist/entities/agent-event.entity.js +114 -0
  28. package/dist/entities/agent-event.entity.js.map +1 -0
  29. package/dist/entities/agent-session.entity.d.ts +23 -0
  30. package/dist/entities/agent-session.entity.d.ts.map +1 -0
  31. package/dist/entities/agent-session.entity.js +94 -0
  32. package/dist/entities/agent-session.entity.js.map +1 -0
  33. package/dist/index.d.ts +8 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +8 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/repository/agent-event.repository.d.ts +12 -0
  38. package/dist/repository/agent-event.repository.d.ts.map +1 -0
  39. package/dist/repository/agent-event.repository.js +34 -0
  40. package/dist/repository/agent-event.repository.js.map +1 -0
  41. package/dist/repository/agent-session.repository.d.ts +12 -0
  42. package/dist/repository/agent-session.repository.d.ts.map +1 -0
  43. package/dist/repository/agent-session.repository.js +34 -0
  44. package/dist/repository/agent-session.repository.js.map +1 -0
  45. package/dist/seeders/seed-data/solid-core-metadata.json +954 -83
  46. package/dist/services/agent-event.service.d.ts +12 -0
  47. package/dist/services/agent-event.service.d.ts.map +1 -0
  48. package/dist/services/agent-event.service.js +38 -0
  49. package/dist/services/agent-event.service.js.map +1 -0
  50. package/dist/services/agent-session.service.d.ts +12 -0
  51. package/dist/services/agent-session.service.d.ts.map +1 -0
  52. package/dist/services/agent-session.service.js +38 -0
  53. package/dist/services/agent-session.service.js.map +1 -0
  54. package/dist/services/field-metadata.service.d.ts +1 -3
  55. package/dist/services/field-metadata.service.d.ts.map +1 -1
  56. package/dist/services/field-metadata.service.js +6 -13
  57. package/dist/services/field-metadata.service.js.map +1 -1
  58. package/dist/services/file/disk-file.service.d.ts +1 -0
  59. package/dist/services/file/disk-file.service.d.ts.map +1 -1
  60. package/dist/services/file/disk-file.service.js +11 -3
  61. package/dist/services/file/disk-file.service.js.map +1 -1
  62. package/dist/services/media.service.d.ts +0 -1
  63. package/dist/services/media.service.d.ts.map +1 -1
  64. package/dist/services/media.service.js +10 -11
  65. package/dist/services/media.service.js.map +1 -1
  66. package/dist/services/model-metadata.service.d.ts.map +1 -1
  67. package/dist/services/model-metadata.service.js +6 -0
  68. package/dist/services/model-metadata.service.js.map +1 -1
  69. package/dist/services/module-metadata.service.d.ts.map +1 -1
  70. package/dist/services/module-metadata.service.js +6 -0
  71. package/dist/services/module-metadata.service.js.map +1 -1
  72. package/dist/services/settings/default-settings-provider.service.js +2 -2
  73. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  74. package/dist/services/user-activity-history.service.d.ts +1 -0
  75. package/dist/services/user-activity-history.service.d.ts.map +1 -1
  76. package/dist/services/user-activity-history.service.js +17 -10
  77. package/dist/services/user-activity-history.service.js.map +1 -1
  78. package/dist/services/view-metadata.service.js +1 -1
  79. package/dist/services/view-metadata.service.js.map +1 -1
  80. package/dist/solid-core.module.d.ts.map +1 -1
  81. package/dist/solid-core.module.js +16 -0
  82. package/dist/solid-core.module.js.map +1 -1
  83. package/package.json +1 -1
  84. package/src/controllers/agent-event.controller.ts +70 -0
  85. package/src/controllers/agent-session.controller.ts +70 -0
  86. package/src/dtos/create-agent-event.dto.ts +84 -0
  87. package/src/dtos/create-agent-session.dto.ts +64 -0
  88. package/src/dtos/update-agent-event.dto.ts +83 -0
  89. package/src/dtos/update-agent-session.dto.ts +63 -0
  90. package/src/entities/agent-event.entity.ts +88 -0
  91. package/src/entities/agent-session.entity.ts +71 -0
  92. package/src/index.ts +8 -0
  93. package/src/repository/agent-event.repository.ts +17 -0
  94. package/src/repository/agent-session.repository.ts +17 -0
  95. package/src/seeders/seed-data/solid-core-metadata.json +954 -83
  96. package/src/services/agent-event.service.ts +19 -0
  97. package/src/services/agent-session.service.ts +19 -0
  98. package/src/services/field-metadata.service.ts +5 -12
  99. package/src/services/file/disk-file.service.ts +15 -7
  100. package/src/services/media.service.ts +12 -51
  101. package/src/services/model-metadata.service.ts +1 -0
  102. package/src/services/module-metadata.service.ts +1 -2
  103. package/src/services/settings/default-settings-provider.service.ts +2 -2
  104. package/src/services/user-activity-history.service.ts +16 -10
  105. package/src/services/view-metadata.service.ts +1 -1
  106. package/src/solid-core.module.ts +16 -0
@@ -0,0 +1,19 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { ModuleRef } from '@nestjs/core';
3
+ import { InjectEntityManager } from '@nestjs/typeorm';
4
+ import { AgentEvent } from 'src/entities/agent-event.entity';
5
+ import { AgentEventRepository } from 'src/repository/agent-event.repository';
6
+ import { EntityManager } from 'typeorm';
7
+ import { CRUDService } from './crud.service';
8
+
9
+ @Injectable()
10
+ export class AgentEventService extends CRUDService<AgentEvent> {
11
+ constructor(
12
+ @InjectEntityManager()
13
+ readonly entityManager: EntityManager,
14
+ readonly repo: AgentEventRepository,
15
+ readonly moduleRef: ModuleRef,
16
+ ) {
17
+ super(entityManager, repo, 'agentEvent', 'solid-core', moduleRef);
18
+ }
19
+ }
@@ -0,0 +1,19 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { ModuleRef } from '@nestjs/core';
3
+ import { InjectEntityManager } from '@nestjs/typeorm';
4
+ import { AgentSession } from 'src/entities/agent-session.entity';
5
+ import { AgentSessionRepository } from 'src/repository/agent-session.repository';
6
+ import { EntityManager } from 'typeorm';
7
+ import { CRUDService } from './crud.service';
8
+
9
+ @Injectable()
10
+ export class AgentSessionService extends CRUDService<AgentSession> {
11
+ constructor(
12
+ @InjectEntityManager()
13
+ readonly entityManager: EntityManager,
14
+ readonly repo: AgentSessionRepository,
15
+ readonly moduleRef: ModuleRef,
16
+ ) {
17
+ super(entityManager, repo, 'agentSession', 'solid-core', moduleRef);
18
+ }
19
+ }
@@ -18,7 +18,6 @@ import { ERROR_MESSAGES } from 'src/constants/error-messages';
18
18
  import qs from 'qs';
19
19
  import { ResolveS3UrlDto } from 'src/dtos/resolve-s3-url.dto';
20
20
  import { MediaStorageProviderMetadataRepository } from 'src/repository/media-storage-provider-metadata.repository';
21
- import { ConfigService } from '@nestjs/config';
22
21
  import { S3FileService } from './file';
23
22
  import { MediaStorageProviderMetadata } from 'src/entities/media-storage-provider-metadata.entity';
24
23
 
@@ -27,7 +26,6 @@ import { MediaStorageProviderMetadata } from 'src/entities/media-storage-provide
27
26
  export class FieldMetadataService implements OnApplicationBootstrap {
28
27
  constructor(
29
28
  private readonly fieldMetadataRepo: FieldMetadataRepository,
30
- private readonly configService: ConfigService,
31
29
  private readonly fileService: S3FileService,
32
30
  private readonly mediaStorageProviderMetadataRepository: MediaStorageProviderMetadataRepository,
33
31
 
@@ -1291,7 +1289,6 @@ export class FieldMetadataService implements OnApplicationBootstrap {
1291
1289
  }
1292
1290
 
1293
1291
  async resolveS3Url(resolveS3UrlDto: ResolveS3UrlDto) {
1294
- let url = "";
1295
1292
  const normalizedKey = this.normalizeS3Key(resolveS3UrlDto.s3Key);
1296
1293
 
1297
1294
  let resolvedBucketName = resolveS3UrlDto.bucketName;
@@ -1308,14 +1305,11 @@ export class FieldMetadataService implements OnApplicationBootstrap {
1308
1305
  }
1309
1306
  this.logger.debug(`INSIDE::resolveS3Url:: resolvedBucketName: ${resolvedBucketName}`)
1310
1307
 
1311
- if (resolveS3UrlDto.isPrivate == "true") {
1312
- const expiryInSeconds = 60 * 60;
1313
- url = await this.fileService.getUrl(`${resolvedBucketName}:${normalizedKey}`, { expiresIn: expiryInSeconds });
1314
- } else {
1315
- url = `https://${resolvedBucketName}.s3.${this.configService.get(
1316
- 'S3_AWS_REGION_NAME',
1317
- )}.amazonaws.com/${normalizedKey}`;
1318
- }
1308
+ const expiryInSeconds = resolveS3UrlDto.isPrivate == "true" ? 60 * 60 : 0;
1309
+ const url = await this.fileService.getUrl(`${resolvedBucketName}:${normalizedKey}`, {
1310
+ expiresIn: expiryInSeconds,
1311
+ });
1312
+
1319
1313
  return { url: url }
1320
1314
  }
1321
1315
 
@@ -1332,4 +1326,3 @@ export class FieldMetadataService implements OnApplicationBootstrap {
1332
1326
  }
1333
1327
  }
1334
1328
 
1335
-
@@ -44,7 +44,7 @@ export class DiskFileService implements IFileService {
44
44
  async write(filePath: string, data: Buffer | string, options?: WriteOptions): Promise<string> {
45
45
  await this.ensureDirectoryExists(filePath);
46
46
  await fsPromises.writeFile(filePath, data);
47
- return `${this.baseUrl}/${filePath}`;
47
+ return this.buildUrl(filePath);
48
48
  }
49
49
 
50
50
  /**
@@ -57,7 +57,7 @@ export class DiskFileService implements IFileService {
57
57
  const writeStream = fs.createWriteStream(filePath);
58
58
  await pipeline(stream, writeStream);
59
59
  this.logger.debug(`File saved via stream: ${filePath}`);
60
- return `${this.baseUrl}/${filePath}`;
60
+ return this.buildUrl(filePath);
61
61
  }
62
62
 
63
63
  /**
@@ -97,13 +97,10 @@ export class DiskFileService implements IFileService {
97
97
  }
98
98
 
99
99
  /**
100
- * Get an accessible URL/path for the file
101
- * For disk storage, returns the file path as-is
100
+ * Get an accessible URL for the file
102
101
  */
103
102
  async getUrl(filePath: string, options?: UrlOptions): Promise<string> {
104
- // For disk storage, we simply return the path
105
- // The caller is responsible for constructing a full URL if needed
106
- return filePath;
103
+ return this.buildUrl(filePath);
107
104
  }
108
105
 
109
106
  /**
@@ -117,4 +114,15 @@ export class DiskFileService implements IFileService {
117
114
  await fsPromises.mkdir(dir, { recursive: true });
118
115
  }
119
116
  }
117
+
118
+ private buildUrl(filePath: string): string {
119
+ const normalizedBaseUrl = this.baseUrl.replace(/\/+$/, '');
120
+ const normalizedPath = filePath.replace(/^\/+/, '');
121
+
122
+ if (!normalizedBaseUrl) {
123
+ return `/${normalizedPath}`;
124
+ }
125
+
126
+ return `${normalizedBaseUrl}/${normalizedPath}`;
127
+ }
120
128
  }
@@ -53,51 +53,29 @@ export class MediaService extends CRUDService<Media> {
53
53
  if (data.records) {
54
54
 
55
55
  for (const media of data.records) {
56
- if (media.mediaStorageProviderMetadata?.type === MediaStorageProviderType.Filesystem) {
57
- media.relativeUri = `${this.settingService.getConfigValue<SolidCoreSetting>("baseUrl")}/${this.getFullFilePathForDisk(media.relativeUri)}`;
58
- } else if (media.mediaStorageProviderMetadata?.type === MediaStorageProviderType.AwsS3) {
59
- media.relativeUri = this.getAwsS3FullFilePath(
60
- media.relativeUri,
61
- media.mediaStorageProviderMetadata.bucketName,
62
- media.mediaStorageProviderMetadata.region
63
- );
56
+ const mediaStorageProvider = media.mediaStorageProviderMetadata;
57
+
58
+ if (mediaStorageProvider?.type === MediaStorageProviderType.Filesystem) {
59
+ media.relativeUri = await this.diskFileService.getUrl(this.getFullFilePathForDisk(media.relativeUri));
60
+ } else if (mediaStorageProvider?.type === MediaStorageProviderType.AwsS3) {
61
+ media.relativeUri = await this.s3FileService.getUrl(`${mediaStorageProvider.bucketName}:${media.relativeUri}`, { region: mediaStorageProvider.region });
64
62
  }
65
63
  }
66
- // data.records.forEach((media: Media) => {
67
- // if (media.mediaStorageProviderMetadata?.type === MediaStorageProviderType.Filesystem) {
68
- // media.relativeUri = `${process.env.BASE_URL}/${this.getFileSysytemFullFilePath(media.relativeUri)}`;
69
- // } else if (media.mediaStorageProviderMetadata?.type === MediaStorageProviderType.AwsS3) {
70
- // media.relativeUri = this.getAwsS3FullFilePath(
71
- // media.relativeUri,
72
- // media.mediaStorageProviderMetadata.bucketName,
73
- // media.mediaStorageProviderMetadata.region
74
- // );
75
- // }
76
- // });
77
64
  }
78
65
  if (data.groupRecords) {
79
66
 
80
67
  for (const group of data.groupRecords) {
81
68
  for (const media of group.groupData.records) {
82
- if (media.mediaStorageProviderMetadata?.type === MediaStorageProviderType.Filesystem) {
83
- media.relativeUri = `${this.settingService.getConfigValue<SolidCoreSetting>("baseUrl")}/${this.getFullFilePathForDisk(media.relativeUri)}`;
69
+ const mediaStorageProvider = media.mediaStorageProviderMetadata;
70
+
71
+ if (mediaStorageProvider?.type === MediaStorageProviderType.Filesystem) {
72
+ media.relativeUri = await this.diskFileService.getUrl(this.getFullFilePathForDisk(media.relativeUri));
84
73
  }
85
- else if (media.mediaStorageProviderMetadata?.type === MediaStorageProviderType.AwsS3) {
86
- media.relativeUri = this.getAwsS3FullFilePath(media.relativeUri, media.mediaStorageProviderMetadata.bucketName, media.mediaStorageProviderMetadata.region);
74
+ else if (mediaStorageProvider?.type === MediaStorageProviderType.AwsS3) {
75
+ media.relativeUri = await this.s3FileService.getUrl(`${mediaStorageProvider.bucketName}:${media.relativeUri}`, { region: mediaStorageProvider.region });
87
76
  }
88
77
  }
89
78
  }
90
-
91
- // data.groupRecords.forEach((group) => {
92
- // group.groupData.records.forEach((media) => {
93
- // if (media.mediaStorageProviderMetadata?.type === MediaStorageProviderType.Filesystem) {
94
- // media.relativeUri = `${process.env.BASE_URL}/${this.getFileSysytemFullFilePath(media.relativeUri)}`;
95
- // }
96
- // else if (media.mediaStorageProviderMetadata?.type === MediaStorageProviderType.AwsS3) {
97
- // media.relativeUri = this.getAwsS3FullFilePath(media.relativeUri, media.mediaStorageProviderMetadata.bucketName, media.mediaStorageProviderMetadata.region);
98
- // }
99
- // });
100
- // });
101
79
  }
102
80
  return data
103
81
  }
@@ -172,24 +150,12 @@ export class MediaService extends CRUDService<Media> {
172
150
  }
173
151
  }
174
152
  );
175
- // if (media.mediaStorageProviderMetadata.type === 'filesystem') {
176
- // const fileStorageProvider = new FileStorageProvider(this.configService, this.fileService, this);
177
-
178
- // await fileStorageProvider.delete(media, media.fieldMetadata);
179
-
180
- // } else if (media.mediaStorageProviderMetadata.type === 'aws-s3') {
181
- // const fileStorageProvider = new FileS3StorageProvider(this.configService, this.fileService, this);
182
- // await fileStorageProvider.delete(media, media.fieldMetadata);
183
-
184
- // } else {
185
- // }
186
153
  const storageProviderType = media.mediaStorageProviderMetadata.type as MediaStorageProviderType;
187
154
  const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);
188
155
  await storageProvider.delete(modelEntity, media.fieldMetadata);
189
156
 
190
157
  return this.repo.remove(media);
191
158
  }
192
- //TODO: Move this to a app builder config
193
159
 
194
160
  private getFullFilePathForDisk(fileName: string): string {
195
161
  const base = this.settingService.getConfigValue<SolidCoreSetting>("fileStorageDir")
@@ -200,11 +166,6 @@ export class MediaService extends CRUDService<Media> {
200
166
  return `${base}/${fileName}`;
201
167
  }
202
168
 
203
- private getAwsS3FullFilePath(awsMediaurl: string, bucketName: string, regionName: string): string {
204
- // https://lunarismedia.s3.ap-south-1.amazonaws.com/LUNARIS_CP_REGISTRATION_CREATIVE.jpg
205
- return `https://${bucketName}.s3.${regionName}.amazonaws.com/${awsMediaurl}`;
206
- }
207
-
208
169
  private getFileName(file: Express.Multer.File): string {
209
170
  return `${file.filename}-${file.originalname}`;
210
171
  }
@@ -551,6 +551,7 @@ export class ModelMetadataService {
551
551
  return removedEntities
552
552
  }
553
553
 
554
+ @DisallowInProduction()
554
555
  async remove(id: number) {
555
556
  const entity = await this.findOne(id);
556
557
  await this.cleanupOnDelete(entity.id);
@@ -326,15 +326,14 @@ export class ModuleMetadataService {
326
326
  }
327
327
  }
328
328
 
329
+ @DisallowInProduction()
329
330
  async remove(id: number) {
330
331
  const entity = await this.findOne(id);
331
332
  await this.cleanupOnDelete(entity.id);
332
333
  const r = await this.moduleMetadataRepo.remove(entity);
333
334
  return r
334
-
335
335
  }
336
336
 
337
-
338
337
  async cleanupOnDelete(moduleEntityId: number) {
339
338
  const moduleEntity = await this.moduleMetadataRepo.findOne({
340
339
  where: {
@@ -34,8 +34,8 @@ const getSolidCoreSettings = (isProd: boolean) => ([
34
34
  { moduleName: "solid-core", key: "authScreenCenterBackgroundImage", value: null, level: SettingLevel.SystemAdminEditable },
35
35
  {
36
36
  moduleName: "solid-core", key: "solidXGenAiCodeBuilderConfig", value: JSON.stringify({
37
- defaultProvider: "",
38
- availableProviders: []
37
+ fastModel: { provider: "", availableProviders: [] },
38
+ defaultProvider: { provider: "", availableProviders: [] },
39
39
  }), level: SettingLevel.SystemAdminEditable
40
40
  },
41
41
  { moduleName: "solid-core", key: "mcpEnabled", value: process.env.MCP_ENABLED || false, level: SettingLevel.SystemAdminReadonly },
@@ -1,4 +1,4 @@
1
- import { Injectable } from '@nestjs/common';
1
+ import { Injectable, Logger } from '@nestjs/common';
2
2
  import { InjectEntityManager } from '@nestjs/typeorm';
3
3
  import { ModuleRef } from "@nestjs/core";
4
4
  import { EntityManager } from 'typeorm';
@@ -13,6 +13,8 @@ import { UserActivityHistoryRepository } from 'src/repository/user-activity-hist
13
13
 
14
14
  @Injectable()
15
15
  export class UserActivityHistoryService extends CRUDService<UserActivityHistory> {
16
+ private readonly _logger = new Logger(UserActivityHistoryService.name);
17
+
16
18
  constructor(
17
19
  @InjectEntityManager()
18
20
  readonly entityManager: EntityManager,
@@ -26,15 +28,19 @@ export class UserActivityHistoryService extends CRUDService<UserActivityHistory>
26
28
  super(entityManager, repo, 'userActivityHistory', 'solid-core', moduleRef);
27
29
  }
28
30
  async logEvent(event: 'login' | 'logout' | 'tokenRefreshed', user: User) {
29
- const ip = this.requestContextService.getIp();
30
- const userAgent = this.requestContextService.getUserAgent();
31
-
32
- await this.repo.save({
33
- user,
34
- event,
35
- ipAddress: ip,
36
- userAgent,
37
- });
31
+ try {
32
+ const ip = this.requestContextService.getIp();
33
+ const userAgent = this.requestContextService.getUserAgent();
34
+
35
+ await this.repo.save({
36
+ user,
37
+ event,
38
+ ipAddress: ip,
39
+ userAgent,
40
+ });
41
+ } catch (err) {
42
+ this._logger.warn(`Failed to log event "${event}" for user ${user?.id}: ${err}`);
43
+ }
38
44
  }
39
45
 
40
46
  }
@@ -144,7 +144,7 @@ export class ViewMetadataService extends CRUDService<ViewMetadata> {
144
144
  .leftJoinAndSelect('action.view', 'view')
145
145
  .where('model.id = :modelId', { modelId: menuItemModelId })
146
146
  .andWhere('module.id = :moduleId', { moduleId: menuItemModuleId })
147
- .andWhere('view.type IN (:...viewTypes)', { viewTypes: ['list', 'kanban', 'tree'] })
147
+ .andWhere('view.type IN (:...viewTypes)', { viewTypes: ['card', 'list', 'kanban', 'tree'] })
148
148
  .getMany();
149
149
 
150
150
  viewModes = actionsForViewModes.map(actionItem => ({
@@ -173,6 +173,8 @@ import { LocaleController } from './controllers/locale.controller';
173
173
  import { RoleMetadataController } from './controllers/role-metadata.controller';
174
174
  import { SavedFiltersController } from './controllers/saved-filters.controller';
175
175
  import { ScheduledJobController } from './controllers/scheduled-job.controller';
176
+ import { AgentSessionController } from './controllers/agent-session.controller';
177
+ import { AgentEventController } from './controllers/agent-event.controller';
176
178
  import { SecurityRuleController } from './controllers/security-rule.controller';
177
179
  import { SettingController } from './controllers/setting.controller';
178
180
  import { InfoController } from './controllers/info.controller';
@@ -197,6 +199,8 @@ import { Locale } from './entities/locale.entity';
197
199
  import { RoleMetadata } from './entities/role-metadata.entity';
198
200
  import { SavedFilters } from './entities/saved-filters.entity';
199
201
  import { ScheduledJob } from './entities/scheduled-job.entity';
202
+ import { AgentSession } from './entities/agent-session.entity';
203
+ import { AgentEvent } from './entities/agent-event.entity';
200
204
  import { SecurityRule } from './entities/security-rule.entity';
201
205
  import { Setting } from './entities/setting.entity';
202
206
  import { UserActivityHistory } from './entities/user-activity-history.entity';
@@ -273,6 +277,8 @@ import { PermissionMetadataRepository } from './repository/permission-metadata.r
273
277
  import { RoleMetadataRepository } from './repository/role-metadata.repository';
274
278
  import { SavedFiltersRepository } from './repository/saved-filters.repository';
275
279
  import { ScheduledJobRepository } from './repository/scheduled-job.repository';
280
+ import { AgentSessionRepository } from './repository/agent-session.repository';
281
+ import { AgentEventRepository } from './repository/agent-event.repository';
276
282
  import { SecurityRuleRepository } from './repository/security-rule.repository';
277
283
  import { SettingRepository } from './repository/setting.repository';
278
284
  import { SmsTemplateRepository } from './repository/sms-template.repository';
@@ -319,6 +325,8 @@ import { RequestContextService } from './services/request-context.service';
319
325
  import { RoleMetadataService } from './services/role-metadata.service';
320
326
  import { SavedFiltersService } from './services/saved-filters.service';
321
327
  import { ScheduledJobService } from './services/scheduled-job.service';
328
+ import { AgentSessionService } from './services/agent-session.service';
329
+ import { AgentEventService } from './services/agent-event.service';
322
330
  import { SchedulerServiceImpl } from './services/scheduled-jobs/scheduler.service';
323
331
  import { SecurityRuleService } from './services/security-rule.service';
324
332
  import { ListOfDashboardQuestionProvidersSelectionProvider } from './services/selection-providers/list-of-dashboard-question-providers-selection-provider.service';
@@ -401,6 +409,8 @@ import { Entity } from 'typeorm';
401
409
  RoleMetadata,
402
410
  SavedFilters,
403
411
  ScheduledJob,
412
+ AgentSession,
413
+ AgentEvent,
404
414
  SecurityRule,
405
415
  Setting,
406
416
  SmsTemplate,
@@ -474,6 +484,8 @@ import { Entity } from 'typeorm';
474
484
  RoleMetadataController,
475
485
  SavedFiltersController,
476
486
  ScheduledJobController,
487
+ AgentSessionController,
488
+ AgentEventController,
477
489
  SecurityRuleController,
478
490
  ServiceController,
479
491
  SettingController,
@@ -735,6 +747,10 @@ import { Entity } from 'typeorm';
735
747
 
736
748
  ViewMetadataRepository,
737
749
  ScheduledJobRepository,
750
+ AgentSessionRepository,
751
+ AgentEventRepository,
752
+ AgentSessionService,
753
+ AgentEventService,
738
754
  ScheduledJobSubscriber,
739
755
  AlphaNumExternalIdComputationProvider,
740
756
  ListOfValuesSubscriber,