@solidxai/core 0.1.4 → 0.1.5-beta.0

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 (209) hide show
  1. package/.claude/settings.local.json +8 -0
  2. package/dist/constants/error-messages.d.ts +1 -0
  3. package/dist/constants/error-messages.d.ts.map +1 -1
  4. package/dist/constants/error-messages.js +1 -0
  5. package/dist/constants/error-messages.js.map +1 -1
  6. package/dist/constants.d.ts +3 -3
  7. package/dist/constants.d.ts.map +1 -1
  8. package/dist/constants.js +12 -12
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controllers/otp-authentication.controller.d.ts +1 -4
  11. package/dist/controllers/otp-authentication.controller.d.ts.map +1 -1
  12. package/dist/controllers/otp-authentication.controller.js +1 -1
  13. package/dist/controllers/role-metadata.controller.d.ts +1 -0
  14. package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
  15. package/dist/controllers/role-metadata.controller.js +15 -0
  16. package/dist/controllers/role-metadata.controller.js.map +1 -1
  17. package/dist/dtos/create-email-template.dto.d.ts.map +1 -1
  18. package/dist/dtos/create-email-template.dto.js.map +1 -1
  19. package/dist/dtos/create-list-of-values.dto.d.ts.map +1 -1
  20. package/dist/dtos/create-list-of-values.dto.js.map +1 -1
  21. package/dist/dtos/create-menu-item-metadata.dto.d.ts.map +1 -1
  22. package/dist/dtos/create-menu-item-metadata.dto.js.map +1 -1
  23. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  24. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  25. package/dist/dtos/create-scheduled-job.dto.d.ts.map +1 -1
  26. package/dist/dtos/create-scheduled-job.dto.js.map +1 -1
  27. package/dist/dtos/create-security-rule.dto.d.ts.map +1 -1
  28. package/dist/dtos/create-security-rule.dto.js.map +1 -1
  29. package/dist/dtos/create-sms-template.dto.d.ts.map +1 -1
  30. package/dist/dtos/create-sms-template.dto.js.map +1 -1
  31. package/dist/dtos/create-view-metadata.dto.d.ts.map +1 -1
  32. package/dist/dtos/create-view-metadata.dto.js.map +1 -1
  33. package/dist/dtos/otp-sign-in.dto.d.ts +1 -1
  34. package/dist/dtos/otp-sign-in.dto.d.ts.map +1 -1
  35. package/dist/dtos/otp-sign-in.dto.js +2 -2
  36. package/dist/dtos/otp-sign-in.dto.js.map +1 -1
  37. package/dist/dtos/otp-sign-up.dto.d.ts +2 -2
  38. package/dist/dtos/otp-sign-up.dto.d.ts.map +1 -1
  39. package/dist/dtos/otp-sign-up.dto.js +2 -2
  40. package/dist/dtos/otp-sign-up.dto.js.map +1 -1
  41. package/dist/dtos/resolve-s3-url.dto.d.ts +2 -5
  42. package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -1
  43. package/dist/dtos/resolve-s3-url.dto.js +1 -13
  44. package/dist/dtos/resolve-s3-url.dto.js.map +1 -1
  45. package/dist/dtos/sign-up.dto.d.ts.map +1 -1
  46. package/dist/dtos/sign-up.dto.js.map +1 -1
  47. package/dist/dtos/update-email-template.dto.d.ts.map +1 -1
  48. package/dist/dtos/update-email-template.dto.js.map +1 -1
  49. package/dist/dtos/update-list-of-values.dto.d.ts.map +1 -1
  50. package/dist/dtos/update-list-of-values.dto.js.map +1 -1
  51. package/dist/dtos/update-menu-item-metadata.dto.d.ts.map +1 -1
  52. package/dist/dtos/update-menu-item-metadata.dto.js.map +1 -1
  53. package/dist/dtos/update-scheduled-job.dto.d.ts.map +1 -1
  54. package/dist/dtos/update-scheduled-job.dto.js.map +1 -1
  55. package/dist/dtos/update-security-rule.dto.d.ts.map +1 -1
  56. package/dist/dtos/update-security-rule.dto.js.map +1 -1
  57. package/dist/dtos/update-sms-template.dto.d.ts.map +1 -1
  58. package/dist/dtos/update-sms-template.dto.js.map +1 -1
  59. package/dist/dtos/update-view-metadata.dto.d.ts.map +1 -1
  60. package/dist/dtos/update-view-metadata.dto.js.map +1 -1
  61. package/dist/entities/user.entity.d.ts +1 -0
  62. package/dist/entities/user.entity.d.ts.map +1 -1
  63. package/dist/entities/user.entity.js +6 -1
  64. package/dist/entities/user.entity.js.map +1 -1
  65. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +2 -0
  66. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
  67. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +33 -23
  68. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
  69. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +3 -0
  70. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
  71. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +36 -23
  72. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
  73. package/dist/helpers/security.helper.js +1 -0
  74. package/dist/helpers/security.helper.js.map +1 -1
  75. package/dist/index.d.ts +0 -4
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +0 -4
  78. package/dist/index.js.map +1 -1
  79. package/dist/repository/solid-base.repository.d.ts +10 -1
  80. package/dist/repository/solid-base.repository.d.ts.map +1 -1
  81. package/dist/repository/solid-base.repository.js +109 -0
  82. package/dist/repository/solid-base.repository.js.map +1 -1
  83. package/dist/seeders/module-metadata-seeder.service.d.ts +2 -0
  84. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  85. package/dist/seeders/module-metadata-seeder.service.js +141 -71
  86. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  87. package/dist/seeders/permission-metadata-seeder.service.d.ts +1 -1
  88. package/dist/seeders/permission-metadata-seeder.service.d.ts.map +1 -1
  89. package/dist/seeders/permission-metadata-seeder.service.js +1 -1
  90. package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
  91. package/dist/seeders/seed-data/solid-core-metadata.json +12 -25
  92. package/dist/services/authentication.service.d.ts +22 -8
  93. package/dist/services/authentication.service.d.ts.map +1 -1
  94. package/dist/services/authentication.service.js +228 -214
  95. package/dist/services/authentication.service.js.map +1 -1
  96. package/dist/services/crud-helper.service.d.ts +4 -0
  97. package/dist/services/crud-helper.service.d.ts.map +1 -1
  98. package/dist/services/crud-helper.service.js +66 -32
  99. package/dist/services/crud-helper.service.js.map +1 -1
  100. package/dist/services/crud.service.d.ts.map +1 -1
  101. package/dist/services/crud.service.js +7 -4
  102. package/dist/services/crud.service.js.map +1 -1
  103. package/dist/services/field-metadata.service.d.ts.map +1 -1
  104. package/dist/services/field-metadata.service.js.map +1 -1
  105. package/dist/services/file/disk-file.service.d.ts +0 -2
  106. package/dist/services/file/disk-file.service.d.ts.map +1 -1
  107. package/dist/services/file/disk-file.service.js +7 -16
  108. package/dist/services/file/disk-file.service.js.map +1 -1
  109. package/dist/services/file/index.d.ts +1 -0
  110. package/dist/services/file/index.d.ts.map +1 -1
  111. package/dist/services/file/index.js +1 -0
  112. package/dist/services/file/index.js.map +1 -1
  113. package/dist/services/file/storage-path-builder.d.ts +17 -0
  114. package/dist/services/file/storage-path-builder.d.ts.map +1 -0
  115. package/dist/{seeders/sms-template-seeder.service.js → services/file/storage-path-builder.js} +45 -35
  116. package/dist/services/file/storage-path-builder.js.map +1 -0
  117. package/dist/services/media.service.d.ts +1 -1
  118. package/dist/services/media.service.d.ts.map +1 -1
  119. package/dist/services/media.service.js +45 -6
  120. package/dist/services/media.service.js.map +1 -1
  121. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  122. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  123. package/dist/services/mediaStorageProviders/file-storage-provider.js +46 -7
  124. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  125. package/dist/services/module-metadata.service.d.ts +4 -6
  126. package/dist/services/module-metadata.service.d.ts.map +1 -1
  127. package/dist/services/module-metadata.service.js +16 -14
  128. package/dist/services/module-metadata.service.js.map +1 -1
  129. package/dist/services/setting.service.d.ts +3 -2
  130. package/dist/services/setting.service.d.ts.map +1 -1
  131. package/dist/services/setting.service.js +7 -4
  132. package/dist/services/setting.service.js.map +1 -1
  133. package/dist/services/settings/default-settings-provider.service.d.ts +24 -2
  134. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  135. package/dist/services/settings/default-settings-provider.service.js +8 -6
  136. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  137. package/dist/solid-core.module.d.ts +3 -1
  138. package/dist/solid-core.module.d.ts.map +1 -1
  139. package/dist/solid-core.module.js +45 -9
  140. package/dist/solid-core.module.js.map +1 -1
  141. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
  142. package/dist/testing/adapters/ui/playwright-adapter.js +35 -2
  143. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
  144. package/package.json +8 -2
  145. package/src/constants/error-messages.ts +1 -0
  146. package/src/constants.ts +3 -3
  147. package/src/controllers/role-metadata.controller.ts +26 -18
  148. package/src/dtos/create-email-template.dto.ts +7 -0
  149. package/src/dtos/create-list-of-values.dto.ts +7 -0
  150. package/src/dtos/create-menu-item-metadata.dto.ts +12 -1
  151. package/src/dtos/create-role-metadata.dto.ts +9 -0
  152. package/src/dtos/create-scheduled-job.dto.ts +14 -0
  153. package/src/dtos/create-security-rule.dto.ts +6 -0
  154. package/src/dtos/create-sms-template.dto.ts +6 -0
  155. package/src/dtos/create-view-metadata.dto.ts +11 -0
  156. package/src/dtos/otp-sign-in.dto.ts +3 -3
  157. package/src/dtos/otp-sign-up.dto.ts +3 -3
  158. package/src/dtos/resolve-s3-url.dto.ts +2 -12
  159. package/src/dtos/sign-up.dto.ts +0 -2
  160. package/src/dtos/update-email-template.dto.ts +6 -0
  161. package/src/dtos/update-list-of-values.dto.ts +8 -0
  162. package/src/dtos/update-menu-item-metadata.dto.ts +12 -0
  163. package/src/dtos/update-scheduled-job.dto.ts +15 -0
  164. package/src/dtos/update-security-rule.dto.ts +7 -0
  165. package/src/dtos/update-sms-template.dto.ts +32 -32
  166. package/src/dtos/update-view-metadata.dto.ts +12 -0
  167. package/src/entities/user.entity.ts +3 -0
  168. package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +43 -32
  169. package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +45 -33
  170. package/src/helpers/security.helper.ts +1 -1
  171. package/src/index.ts +0 -4
  172. package/src/repository/solid-base.repository.ts +172 -1
  173. package/src/seeders/module-metadata-seeder.service.ts +188 -126
  174. package/src/seeders/permission-metadata-seeder.service.ts +1 -4
  175. package/src/seeders/seed-data/solid-core-metadata.json +12 -25
  176. package/src/services/authentication.service.ts +268 -266
  177. package/src/services/crud-helper.service.ts +79 -36
  178. package/src/services/crud.service.ts +9 -4
  179. package/src/services/field-metadata.service.ts +0 -71
  180. package/src/services/file/disk-file.service.ts +8 -18
  181. package/src/services/file/index.ts +1 -0
  182. package/src/services/file/storage-path-builder.ts +56 -0
  183. package/src/services/media.service.ts +13 -7
  184. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +1 -1
  185. package/src/services/mediaStorageProviders/file-storage-provider.ts +13 -8
  186. package/src/services/module-metadata.service.ts +18 -15
  187. package/src/services/setting.service.ts +5 -3
  188. package/src/services/settings/default-settings-provider.service.ts +5 -3
  189. package/src/solid-core.module.ts +16 -12
  190. package/src/testing/adapters/ui/playwright-adapter.ts +1 -1
  191. package/dist/passport-strategies/local.strategy.d.ts +0 -15
  192. package/dist/passport-strategies/local.strategy.d.ts.map +0 -1
  193. package/dist/passport-strategies/local.strategy.js +0 -44
  194. package/dist/passport-strategies/local.strategy.js.map +0 -1
  195. package/dist/seeders/email-template-seeder.service.d.ts +0 -10
  196. package/dist/seeders/email-template-seeder.service.d.ts.map +0 -1
  197. package/dist/seeders/email-template-seeder.service.js +0 -84
  198. package/dist/seeders/email-template-seeder.service.js.map +0 -1
  199. package/dist/seeders/sms-template-seeder.service.d.ts +0 -10
  200. package/dist/seeders/sms-template-seeder.service.d.ts.map +0 -1
  201. package/dist/seeders/sms-template-seeder.service.js.map +0 -1
  202. package/dist/seeders/user-seeder.service.d.ts +0 -10
  203. package/dist/seeders/user-seeder.service.d.ts.map +0 -1
  204. package/dist/seeders/user-seeder.service.js +0 -44
  205. package/dist/seeders/user-seeder.service.js.map +0 -1
  206. package/src/passport-strategies/local.strategy.ts +0 -28
  207. package/src/seeders/email-template-seeder.service.ts +0 -49
  208. package/src/seeders/sms-template-seeder.service.ts +0 -50
  209. package/src/seeders/user-seeder.service.ts +0 -33
@@ -1,14 +1,19 @@
1
1
  import { BadRequestException, forwardRef, Inject, Injectable, Logger, NotFoundException } from '@nestjs/common';
2
- import { InjectDataSource, InjectRepository } from '@nestjs/typeorm';
3
- import { DataSource, EntityManager, Repository, SelectQueryBuilder } from 'typeorm';
2
+ import { InjectDataSource } from '@nestjs/typeorm';
3
+ import { DEFAULT_MEDIA_FILE_STORAGE_DIR } from "src/services/settings/default-settings-provider.service";
4
+ import type { SolidCoreSetting } from "src/services/settings/default-settings-provider.service";
5
+ import { DataSource, EntityManager, SelectQueryBuilder } from 'typeorm';
4
6
  import { CreateModuleMetadataDto } from '../dtos/create-module-metadata.dto';
5
7
  import { ModuleMetadata } from '../entities/module-metadata.entity';
6
- import type { SolidCoreSetting } from "src/services/settings/default-settings-provider.service";
7
8
 
8
- import { classify, dasherize } from '@angular-devkit/core/src/utils/strings';
9
+ import { classify } from '@angular-devkit/core/src/utils/strings';
9
10
  import { ConfigService } from '@nestjs/config';
10
11
  import * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await
11
12
  import * as path from 'path'; // To handle file paths
13
+ import { ERROR_MESSAGES } from 'src/constants/error-messages';
14
+ import { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';
15
+ import { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';
16
+ import { ModuleMetadataRepository } from 'src/repository/module-metadata.repository';
12
17
  import { PermissionMetadataSeederService } from 'src/seeders/permission-metadata-seeder.service';
13
18
  import { DiskFileService } from 'src/services/file';
14
19
  import { BasicFilterDto } from '../dtos/basic-filters.dto';
@@ -21,11 +26,6 @@ import { SolidRegistry } from '../helpers/solid-registry';
21
26
  import { CodeGenerationOptions, ModuleMetadataConfiguration } from '../interfaces';
22
27
  import { CrudHelperService } from './crud-helper.service';
23
28
  import { ModelMetadataService } from './model-metadata.service';
24
- import { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';
25
- import { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';
26
- import { ERROR_MESSAGES } from 'src/constants/error-messages';
27
- import Module from 'module';
28
- import { ModuleMetadataRepository } from 'src/repository/module-metadata.repository';
29
29
  import { SettingService } from './setting.service';
30
30
 
31
31
  @Injectable()
@@ -40,7 +40,6 @@ export class ModuleMetadataService {
40
40
  private readonly moduleMetadataRepo: ModuleMetadataRepository,
41
41
  private readonly crudHelperService: CrudHelperService,
42
42
  private readonly schematicService: SchematicService,
43
- private readonly configService: ConfigService,
44
43
  private readonly fileService: DiskFileService,
45
44
  private readonly settingService: SettingService,
46
45
 
@@ -133,7 +132,7 @@ export class ModuleMetadataService {
133
132
 
134
133
  async createInDB(manager: EntityManager, createDto: CreateModuleMetadataDto, files: Express.Multer.File[] = []) {
135
134
  if (files.length > 0) {
136
- const fileStoragePath = await this.getFileSysytemFullFilePath(this.getFileName(files[0]));
135
+ const fileStoragePath = this.getFullFilePathForDisk(this.getFileName(files[0]));
137
136
  this.fileService.copy(files[0].path, fileStoragePath);
138
137
  this.fileService.delete(files[0].path);
139
138
  createDto.menuIconUrl = fileStoragePath;
@@ -239,7 +238,7 @@ export class ModuleMetadataService {
239
238
  }
240
239
  if (files.length > 0) {
241
240
 
242
- const fileStoragePath = await this.getFileSysytemFullFilePath(this.getFileName(files[0]));
241
+ const fileStoragePath = this.getFullFilePathForDisk(this.getFileName(files[0]));
243
242
  this.fileService.copy(files[0].path, fileStoragePath);
244
243
  this.fileService.delete(files[0].path);
245
244
  module.menuIconUrl = fileStoragePath;
@@ -464,9 +463,13 @@ export class ModuleMetadataService {
464
463
  return outputLines.join('\n');
465
464
  }
466
465
 
467
- private async getFileSysytemFullFilePath(fileName: string): Promise<string> {
468
- const fileStorageDir = this.settingService.getConfigValue<SolidCoreSetting>("fileStorageDir")
469
- return `${fileStorageDir}/${fileName}`;
466
+ private getFullFilePathForDisk(fileName: string): string {
467
+ const base = this.settingService.getConfigValue<SolidCoreSetting>("fileStorageDir")
468
+ || DEFAULT_MEDIA_FILE_STORAGE_DIR;
469
+ if (path.isAbsolute(fileName) || fileName.startsWith(`${base}/`)) {
470
+ return fileName;
471
+ }
472
+ return `${base}/${fileName}`;
470
473
  }
471
474
 
472
475
  private getFileName(file: Express.Multer.File): string {
@@ -7,7 +7,7 @@ import { CreateSettingDto } from 'src/dtos/create-setting.dto';
7
7
  import { GetMcpUrlDto } from 'src/dtos/get-mcp-url.dto';
8
8
  import { User } from 'src/entities/user.entity';
9
9
  import { SettingRepository } from '../repository/setting.repository';
10
- import { FILE_SERVICE, IFileService } from './file';
10
+ import { FILE_SERVICE, IFileService, FILE_STORAGE_PATH_BUILDER, IStoragePathBuilder } from './file';
11
11
  import { Setting } from '../entities/setting.entity';
12
12
  import { RequestContextService } from './request-context.service';
13
13
  import { SolidRegistry } from 'src/helpers/solid-registry';
@@ -32,6 +32,7 @@ export class SettingService {
32
32
 
33
33
  constructor(
34
34
  @Inject(FILE_SERVICE) readonly fileService: IFileService,
35
+ @Inject(FILE_STORAGE_PATH_BUILDER) readonly pathBuilder: IStoragePathBuilder,
35
36
  readonly solidRegistry: SolidRegistry,
36
37
  readonly repo: SettingRepository,
37
38
  readonly moduleMetadataRepo: ModuleMetadataRepository,
@@ -251,9 +252,10 @@ export class SettingService {
251
252
  const relativeFileName = `${file.filename}-${file.originalname}`;
252
253
 
253
254
  // Read file from local disk (where Multer stores uploads) and write to storage
254
- // The file service resolves the storage path and returns the public URL
255
+ // The path builder constructs the provider-appropriate storage path
255
256
  const fileContent = await fsPromises.readFile(file.path);
256
- const fileUrl = await this.fileService.write(relativeFileName, fileContent, { contentType: file.mimetype });
257
+ const storagePath = this.pathBuilder.build(relativeFileName);
258
+ const fileUrl = await this.fileService.write(storagePath, fileContent, { contentType: file.mimetype });
257
259
  // Delete the temp file from local disk
258
260
  await fsPromises.unlink(file.path);
259
261
 
@@ -3,8 +3,8 @@ import { Environment } from "src/decorators/disallow-in-production.decorator";
3
3
  import { SettingsProvider } from "src/decorators/settings-provider.decorator";
4
4
  import { ISettingsProvider, SettingDefinition, SettingLevel } from "src/interfaces";
5
5
 
6
- const DEFAULT_MEDIA_UPLOAD_DIR = 'media-uploads';
7
- const DEFAULT_MEDIA_FILE_STORAGE_DIR = 'media-files-storage';
6
+ export const DEFAULT_MEDIA_UPLOAD_DIR = 'media-uploads';
7
+ export const DEFAULT_MEDIA_FILE_STORAGE_DIR = 'media-files-storage';
8
8
 
9
9
  // 1.
10
10
  const getSolidCoreSettings = (isProd: boolean) => ([
@@ -87,7 +87,8 @@ const getSolidCoreSettings = (isProd: boolean) => ([
87
87
  // iam-settings-provider.service.ts
88
88
  { moduleName: "solid-core", key: "passwordLessAuth", value: (process.env.IAM_PASSWORD_LESS_AUTH?.trim() ?? 'false') === 'true', level: SettingLevel.SystemAdminEditable },
89
89
  { moduleName: "solid-core", key: "passwordBasedAuth", value: (process.env.IAM_PASSWORD_BASED_AUTH?.trim() ?? 'true') === 'true', level: SettingLevel.SystemAdminEditable },
90
- { moduleName: "solid-core", key: "passwordlessRegistrationValidateWhat", value: (process.env.IAM_PASSWORD_LESS_REGISTRATION_VALIDATE_WHAT ?? 'email').split(',').map((item) => item.trim()), level: SettingLevel.SystemAdminEditable },
90
+ { moduleName: "solid-core", key: "passwordlessRegistrationValidateWhat", value: (process.env.IAM_PASSWORD_LESS_REGISTRATION_VALIDATE_WHAT ?? 'email').trim(), level: SettingLevel.SystemAdminEditable },
91
+ { moduleName: "solid-core", key: "passwordlessLoginValidateWhat", value: process.env.IAM_PASSWORD_LESS_LOGIN_VALIDATE_WHAT ?? 'email', level: SettingLevel.SystemAdminEditable },
91
92
  { moduleName: "solid-core", key: "allowPublicRegistration", value: (process.env.IAM_ALLOW_PUBLIC_REGISTRATION ?? 'true') === 'true', level: SettingLevel.SystemAdminEditable },
92
93
  { moduleName: "solid-core", key: "activateUserOnRegistration", value: (process.env.IAM_ACTIVATE_USER_ON_REGISTRATION ?? 'true') === 'true', level: SettingLevel.SystemAdminEditable },
93
94
  { moduleName: "solid-core", key: "autoLoginUserOnRegistration", value: (process.env.IAM_AUTO_LOGIN_USER_ON_REGISTRATION ?? 'false') === 'true', level: SettingLevel.SystemEnv },
@@ -96,6 +97,7 @@ const getSolidCoreSettings = (isProd: boolean) => ([
96
97
  { moduleName: "solid-core", key: "defaultRole", value: process.env.IAM_DEFAULT_ROLE ?? 'Public', level: SettingLevel.SystemAdminEditable },
97
98
  { moduleName: "solid-core", key: "dummyOtp", value: process.env.IAM_OTP_DUMMY, level: SettingLevel.SystemEnv },
98
99
  { moduleName: "solid-core", key: "forgotPasswordSendVerificationTokenOn", value: process.env.IAM_FORGOT_PASSWORD_SEND_VERIFICATION_TOKEN_ON ?? 'email', level: SettingLevel.SystemEnv },
100
+ { moduleName: "solid-core", key: "maxFailedLoginAttempts", value: parseInt(process.env.IAM_MAX_FAILED_LOGIN_ATTEMPTS ?? '0'), level: SettingLevel.SystemAdminReadonly },
99
101
  { moduleName: "solid-core", key: "forceChangePasswordOnFirstLogin", value: false, level: SettingLevel.SystemAdminEditable },
100
102
  { moduleName: "solid-core", key: "authenticationPasswordRegex", value: process.env.PASSWORD_REGEX || '^$|^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^\\da-zA-Z]).*$', level: SettingLevel.SystemAdminEditable },
101
103
  { moduleName: "solid-core", key: "authenticationPasswordRegexErrorMessage", value: process.env.PASSWORD_REGEX_ERROR_MESSAGE || 'Password must contain at least one uppercase, one lowercase, one number, and one special character.', level: SettingLevel.SystemAdminEditable },
@@ -1,4 +1,5 @@
1
- import { Global, Module } from '@nestjs/common';
1
+ import { Global, MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
2
+ import * as express from 'express';
2
3
  import { ConfigModule, ConfigService } from '@nestjs/config';
3
4
  import {
4
5
  APP_FILTER,
@@ -97,16 +98,12 @@ import { TestQueuePublisher } from './jobs/test-queue-publisher.service';
97
98
  import { TestQueueSubscriber } from './jobs/test-queue-subscriber.service';
98
99
  import { UserRegistrationListener } from './listeners/user-registration.listener';
99
100
  import { GoogleOauthStrategy } from './passport-strategies/google-oauth.strategy';
100
- import { LocalStrategy } from './passport-strategies/local.strategy';
101
- import { EmailTemplateSeederService } from './seeders/email-template-seeder.service';
102
- import { SmsTemplateSeederService } from './seeders/sms-template-seeder.service';
103
- import { UserSeederService } from './seeders/user-seeder.service';
104
101
  import { AuthenticationService } from './services/authentication.service';
105
102
  import { BcryptService } from './services/bcrypt.service';
106
103
  import { UuidExternalIdEntityComputedFieldProvider } from './services/computed-fields/entity/uuid-externalid-entity-computed-field-provider.service';
107
104
  import { UuidExternalIdComputedFieldProvider } from './services/computed-fields/uuid-external-id-computed-field-provider.service';
108
105
  import { EmailTemplateService } from './services/email-template.service';
109
- import { DiskFileService, S3FileService, FileServiceFactory } from './services/file';
106
+ import { DiskFileService, S3FileService, FileServiceFactory, DiskStoragePathBuilder, S3StoragePathBuilder, StoragePathBuilderFactory } from './services/file';
110
107
  import { HashingService } from './services/hashing.service';
111
108
  import { ElasticEmailService } from './services/mail/elastic-email.service';
112
109
  import { SMTPEMailService } from './services/mail/smtp-email.service';
@@ -505,6 +502,9 @@ import { ListOfRolesSelectionProvider } from './services/selection-providers/lis
505
502
  DiskFileService,
506
503
  S3FileService,
507
504
  FileServiceFactory,
505
+ DiskStoragePathBuilder,
506
+ S3StoragePathBuilder,
507
+ StoragePathBuilderFactory,
508
508
  TextractService,
509
509
  SolidRegistry,
510
510
  SeedCommand,
@@ -563,8 +563,6 @@ import { ListOfRolesSelectionProvider } from './services/selection-providers/lis
563
563
  Three60WhatsappService,
564
564
  MqMessageService,
565
565
  MqMessageQueueService,
566
- EmailTemplateSeederService,
567
- SmsTemplateSeederService,
568
566
  TinyUrlService,
569
567
  PdfService,
570
568
  UuidExternalIdComputedFieldProvider,
@@ -577,8 +575,6 @@ import { ListOfRolesSelectionProvider } from './services/selection-providers/lis
577
575
  AuthenticationService,
578
576
  GoogleAuthenticationController,
579
577
  RefreshTokenIdsStorageService,
580
- UserSeederService,
581
- LocalStrategy,
582
578
  GoogleOauthStrategy,
583
579
  UserRegistrationListener,
584
580
  TestQueuePublisher,
@@ -734,6 +730,9 @@ import { ListOfRolesSelectionProvider } from './services/selection-providers/lis
734
730
  DiskFileService,
735
731
  S3FileService,
736
732
  FileServiceFactory,
733
+ DiskStoragePathBuilder,
734
+ S3StoragePathBuilder,
735
+ StoragePathBuilderFactory,
737
736
  HttpModule,
738
737
  ImportTransactionService,
739
738
  ListOfValuesService,
@@ -768,11 +767,16 @@ import { ListOfRolesSelectionProvider } from './services/selection-providers/lis
768
767
  TwilioSMSService,
769
768
  TypeOrmModule,
770
769
  UserActivityHistoryService,
771
- UserSeederService,
772
770
  ImageEncodingService,
773
771
  SolidMicroserviceAdapter,
774
772
  UserService,
775
773
  SettingService,
776
774
  ],
777
775
  })
778
- export class SolidCoreModule { }
776
+ export class SolidCoreModule implements NestModule {
777
+ configure(consumer: MiddlewareConsumer) {
778
+ consumer
779
+ .apply(express.json({ limit: '10mb' }), express.urlencoded({ limit: '10mb', extended: true }))
780
+ .forRoutes('*');
781
+ }
782
+ }
@@ -1,4 +1,3 @@
1
- import { chromium } from "playwright";
2
1
  import type { Browser, BrowserContext, Page } from "playwright";
3
2
 
4
3
  import type { PlaywrightAdapterOptions } from "./ui.types";
@@ -20,6 +19,7 @@ export class PlaywrightAdapter {
20
19
  }
21
20
 
22
21
  async start(): Promise<void> {
22
+ const { chromium } = await import('playwright');
23
23
  this.browser = await chromium.launch({ headless: this.headless });
24
24
  this.context = await this.browser.newContext();
25
25
  this.page = await this.context.newPage();
@@ -1,15 +0,0 @@
1
- import { Strategy } from 'passport-local';
2
- import { AuthenticationService } from '../services/authentication.service';
3
- import { UserService } from '../services/user.service';
4
- declare const LocalStrategy_base: new (...args: any[]) => Strategy;
5
- export declare class LocalStrategy extends LocalStrategy_base {
6
- private authService;
7
- private userService;
8
- constructor(authService: AuthenticationService, userService: UserService);
9
- validate(username: string, password: string): Promise<any>;
10
- }
11
- declare const LocalAuthGuard_base: import("@nestjs/passport").Type<import("@nestjs/passport").IAuthGuard>;
12
- export declare class LocalAuthGuard extends LocalAuthGuard_base {
13
- }
14
- export {};
15
- //# sourceMappingURL=local.strategy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local.strategy.d.ts","sourceRoot":"","sources":["../../src/passport-strategies/local.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;;AAGvD,qBACa,aAAc,SAAQ,kBAA0B;IAErD,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW;gBADX,WAAW,EAAE,qBAAqB,EAClC,WAAW,EAAE,WAAW;IAK9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAOnE;;AAGD,qBACa,cAAe,SAAQ,mBAAkB;CAAI"}
@@ -1,44 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.LocalAuthGuard = exports.LocalStrategy = void 0;
13
- const passport_local_1 = require("passport-local");
14
- const passport_1 = require("@nestjs/passport");
15
- const common_1 = require("@nestjs/common");
16
- const authentication_service_1 = require("../services/authentication.service");
17
- const user_service_1 = require("../services/user.service");
18
- let LocalStrategy = class LocalStrategy extends (0, passport_1.PassportStrategy)(passport_local_1.Strategy) {
19
- constructor(authService, userService) {
20
- super();
21
- this.authService = authService;
22
- this.userService = userService;
23
- }
24
- async validate(username, password) {
25
- const user = await this.authService.validateUserAndRehashPasswordIfRequired({ username, password, email: null });
26
- if (!user) {
27
- throw new common_1.UnauthorizedException();
28
- }
29
- return user;
30
- }
31
- };
32
- exports.LocalStrategy = LocalStrategy;
33
- exports.LocalStrategy = LocalStrategy = __decorate([
34
- (0, common_1.Injectable)(),
35
- __metadata("design:paramtypes", [authentication_service_1.AuthenticationService,
36
- user_service_1.UserService])
37
- ], LocalStrategy);
38
- let LocalAuthGuard = class LocalAuthGuard extends (0, passport_1.AuthGuard)('local') {
39
- };
40
- exports.LocalAuthGuard = LocalAuthGuard;
41
- exports.LocalAuthGuard = LocalAuthGuard = __decorate([
42
- (0, common_1.Injectable)()
43
- ], LocalAuthGuard);
44
- //# sourceMappingURL=local.strategy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local.strategy.js","sourceRoot":"","sources":["../../src/passport-strategies/local.strategy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAA0C;AAC1C,+CAA+D;AAC/D,2CAAmE;AACnE,+EAA2E;AAC3E,2DAAuD;AAIhD,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,IAAA,2BAAgB,EAAC,yBAAQ,CAAC;IACzD,YACY,WAAkC,EAClC,WAAwB;QAEhC,KAAK,EAAE,CAAC;QAHA,gBAAW,GAAX,WAAW,CAAuB;QAClC,gBAAW,GAAX,WAAW,CAAa;IAGpC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,QAAgB;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,uCAAuC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACjH,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,8BAAqB,EAAE,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ,CAAA;AAfY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAGgB,8CAAqB;QACrB,0BAAW;GAH3B,aAAa,CAezB;AAIM,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,IAAA,oBAAS,EAAC,OAAO,CAAC;CAAI,CAAA;AAA7C,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;GACA,cAAc,CAA+B","sourcesContent":["import { Strategy } from 'passport-local';\nimport { AuthGuard, PassportStrategy } from '@nestjs/passport';\nimport { Injectable, UnauthorizedException } from '@nestjs/common';\nimport { AuthenticationService } from '../services/authentication.service';\nimport { UserService } from '../services/user.service';\n\n\n@Injectable()\nexport class LocalStrategy extends PassportStrategy(Strategy) {\n constructor(\n private authService: AuthenticationService,\n private userService: UserService,\n ) {\n super();\n }\n\n async validate(username: string, password: string): Promise<any> {\n const user = await this.authService.validateUserAndRehashPasswordIfRequired({ username, password, email: null });\n if (!user) {\n throw new UnauthorizedException();\n }\n return user;\n }\n}\n\n\n@Injectable()\nexport class LocalAuthGuard extends AuthGuard('local') { }\n"]}
@@ -1,10 +0,0 @@
1
- import { EmailTemplateService } from '../services/email-template.service';
2
- import { SettingService } from 'src/services/setting.service';
3
- export declare class EmailTemplateSeederService {
4
- private readonly emailTemplateService;
5
- private readonly settingService;
6
- private readonly logger;
7
- constructor(emailTemplateService: EmailTemplateService, settingService: SettingService);
8
- seed(): Promise<void>;
9
- }
10
- //# sourceMappingURL=email-template-seeder.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email-template-seeder.service.d.ts","sourceRoot":"","sources":["../../src/seeders/email-template-seeder.service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,qBACa,0BAA0B;IAI/B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;gBAGjD,oBAAoB,EAAE,oBAAoB,EAC1C,cAAc,EAAE,cAAc;IAG7C,IAAI;CA6Bb"}
@@ -1,84 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
- return c > 3 && r && Object.defineProperty(target, key, r), r;
23
- };
24
- var __importStar = (this && this.__importStar) || (function () {
25
- var ownKeys = function(o) {
26
- ownKeys = Object.getOwnPropertyNames || function (o) {
27
- var ar = [];
28
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
- return ar;
30
- };
31
- return ownKeys(o);
32
- };
33
- return function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- })();
41
- var __metadata = (this && this.__metadata) || function (k, v) {
42
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
- };
44
- var EmailTemplateSeederService_1;
45
- Object.defineProperty(exports, "__esModule", { value: true });
46
- exports.EmailTemplateSeederService = void 0;
47
- const common_1 = require("@nestjs/common");
48
- const fs = __importStar(require("fs"));
49
- const path = __importStar(require("path"));
50
- const email_template_service_1 = require("../services/email-template.service");
51
- const setting_service_1 = require("../services/setting.service");
52
- let EmailTemplateSeederService = EmailTemplateSeederService_1 = class EmailTemplateSeederService {
53
- constructor(emailTemplateService, settingService) {
54
- this.emailTemplateService = emailTemplateService;
55
- this.settingService = settingService;
56
- this.logger = new common_1.Logger(EmailTemplateSeederService_1.name);
57
- }
58
- async seed() {
59
- const seedDataFileVariable = this.settingService.getConfigValue("emailTemplateSeederFiles");
60
- const seedDataFiles = seedDataFileVariable.split(',');
61
- for (let i = 0; i < seedDataFiles.length; i++) {
62
- const seedDataFile = seedDataFiles[i];
63
- const fullPath = path.join(process.cwd(), seedDataFile);
64
- this.logger.log(`Using email template seed data: ${fullPath}`);
65
- const emailTemplateJson = fs.readFileSync(fullPath, 'utf-8').toString();
66
- const emailTemplates = JSON.parse(emailTemplateJson);
67
- for (let i = 0; i < emailTemplates.length; i++) {
68
- const emailTemplate = emailTemplates[i];
69
- this.logger.log(`Found ${emailTemplate.name} email template`);
70
- const emailTemplateFilePath = path.join(process.cwd(), emailTemplate.body);
71
- emailTemplate.body = fs.readFileSync(emailTemplateFilePath, 'utf-8').toString();
72
- await this.emailTemplateService.removeByName(emailTemplate.name);
73
- await this.emailTemplateService.create(emailTemplate);
74
- }
75
- }
76
- }
77
- };
78
- exports.EmailTemplateSeederService = EmailTemplateSeederService;
79
- exports.EmailTemplateSeederService = EmailTemplateSeederService = EmailTemplateSeederService_1 = __decorate([
80
- (0, common_1.Injectable)(),
81
- __metadata("design:paramtypes", [email_template_service_1.EmailTemplateService,
82
- setting_service_1.SettingService])
83
- ], EmailTemplateSeederService);
84
- //# sourceMappingURL=email-template-seeder.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email-template-seeder.service.js","sourceRoot":"","sources":["../../src/seeders/email-template-seeder.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4D;AAC5D,uCAAyB;AACzB,2CAA6B;AAI7B,+EAA0E;AAE1E,iEAA8D;AAGvD,IAAM,0BAA0B,kCAAhC,MAAM,0BAA0B;IAGnC,YACqB,oBAA0C,EAC1C,cAA8B;QAD9B,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,mBAAc,GAAd,cAAc,CAAgB;QAJlC,WAAM,GAAG,IAAI,eAAM,CAAC,4BAA0B,CAAC,IAAI,CAAC,CAAC;IAKlE,CAAC;IAEL,KAAK,CAAC,IAAI;QAEN,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAmB,0BAA0B,CAAC,CAAC;QAC9G,MAAM,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;YAGxD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;YAC/D,MAAM,iBAAiB,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YACxE,MAAM,cAAc,GAA6B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAE/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,aAAa,CAAC,IAAI,iBAAiB,CAAC,CAAC;gBAG9D,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;gBAC3E,aAAa,CAAC,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;gBAG/E,MAAM,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACjE,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC1D,CAAC;QAEL,CAAC;IACL,CAAC;CACJ,CAAA;AArCY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,mBAAU,GAAE;qCAKkC,6CAAoB;QAC1B,gCAAc;GAL1C,0BAA0B,CAqCtC","sourcesContent":["import { Inject, Injectable, Logger } from '@nestjs/common';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\nimport { ConfigType } from '@nestjs/config';\nimport { EmailTemplateService } from '../services/email-template.service';\nimport { CreateEmailTemplateDto } from '../dtos/create-email-template.dto';\nimport { SettingService } from 'src/services/setting.service';\n\n@Injectable()\nexport class EmailTemplateSeederService {\n private readonly logger = new Logger(EmailTemplateSeederService.name);\n\n constructor(\n private readonly emailTemplateService: EmailTemplateService,\n private readonly settingService: SettingService\n ) { }\n\n async seed() {\n // Read the module metadata from a file specified in the .env \n const seedDataFileVariable = this.settingService.getConfigValue<SolidCoreSetting>(\"emailTemplateSeederFiles\");\n const seedDataFiles = seedDataFileVariable.split(',');\n\n for (let i = 0; i < seedDataFiles.length; i++) {\n const seedDataFile = seedDataFiles[i];\n const fullPath = path.join(process.cwd(), seedDataFile);\n\n // For each module metadata seed file provided, read contents, parse & convert to a variable. \n this.logger.log(`Using email template seed data: ${fullPath}`);\n const emailTemplateJson = fs.readFileSync(fullPath, 'utf-8').toString();\n const emailTemplates: CreateEmailTemplateDto[] = JSON.parse(emailTemplateJson);\n\n for (let i = 0; i < emailTemplates.length; i++) {\n const emailTemplate = emailTemplates[i];\n this.logger.log(`Found ${emailTemplate.name} email template`);\n\n // We need to load the actual template contents. \n const emailTemplateFilePath = path.join(process.cwd(), emailTemplate.body);\n emailTemplate.body = fs.readFileSync(emailTemplateFilePath, 'utf-8').toString()\n\n // Save to DB.\n await this.emailTemplateService.removeByName(emailTemplate.name);\n await this.emailTemplateService.create(emailTemplate);\n }\n\n }\n }\n}"]}
@@ -1,10 +0,0 @@
1
- import { SmsTemplateService } from '../services/sms-template.service';
2
- import { SettingService } from 'src/services/setting.service';
3
- export declare class SmsTemplateSeederService {
4
- private readonly smsTemplateService;
5
- private readonly settingService;
6
- private readonly logger;
7
- constructor(smsTemplateService: SmsTemplateService, settingService: SettingService);
8
- seed(): Promise<void>;
9
- }
10
- //# sourceMappingURL=sms-template-seeder.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sms-template-seeder.service.d.ts","sourceRoot":"","sources":["../../src/seeders/sms-template-seeder.service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,qBACa,wBAAwB;IAI7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;gBAG/C,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,cAAc;IAG7C,IAAI;CA8Bb"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sms-template-seeder.service.js","sourceRoot":"","sources":["../../src/seeders/sms-template-seeder.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4D;AAC5D,uCAAyB;AACzB,2CAA6B;AAK7B,2EAAsE;AACtE,iEAA8D;AAGvD,IAAM,wBAAwB,gCAA9B,MAAM,wBAAwB;IAGjC,YACqB,kBAAsC,EACtC,cAA8B;QAD9B,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,mBAAc,GAAd,cAAc,CAAgB;QAJlC,WAAM,GAAG,IAAI,eAAM,CAAC,0BAAwB,CAAC,IAAI,CAAC,CAAC;IAKhE,CAAC;IAEL,KAAK,CAAC,IAAI;QAEN,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAmB,wBAAwB,CAAC,CAAC;QAC5G,MAAM,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;YAGxD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;YAC7D,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtE,MAAM,YAAY,GAA2B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAEzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,IAAI,eAAe,CAAC,CAAC;gBAG1D,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;oBACnB,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;oBACvE,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;gBAC/E,CAAC;gBAGD,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC7D,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACtD,CAAC;QACL,CAAC;IACL,CAAC;CACJ,CAAA;AAtCY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;qCAKgC,yCAAkB;QACtB,gCAAc;GAL1C,wBAAwB,CAsCpC","sourcesContent":["import { Inject, Injectable, Logger } from '@nestjs/common';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\nimport { ConfigType } from '@nestjs/config';\nimport { CreateSmsTemplateDto } from '../dtos/create-sms-template.dto';\nimport { SmsTemplateService } from '../services/sms-template.service';\nimport { SettingService } from 'src/services/setting.service';\n\n@Injectable()\nexport class SmsTemplateSeederService {\n private readonly logger = new Logger(SmsTemplateSeederService.name);\n\n constructor(\n private readonly smsTemplateService: SmsTemplateService,\n private readonly settingService: SettingService\n ) { }\n\n async seed() {\n // Read the module metadata from a file specified in the .env \n const seedDataFileVariable = this.settingService.getConfigValue<SolidCoreSetting>(\"smsTemplateSeederFiles\");\n const seedDataFiles = seedDataFileVariable.split(',');\n\n for (let i = 0; i < seedDataFiles.length; i++) {\n const seedDataFile = seedDataFiles[i];\n const fullPath = path.join(process.cwd(), seedDataFile);\n\n // For each module metadata seed file provided, read contents, parse & convert to a variable. \n this.logger.log(`Using sms template seed data: ${fullPath}`);\n const smsTemplateJson = fs.readFileSync(fullPath, 'utf-8').toString();\n const smsTemplates: CreateSmsTemplateDto[] = JSON.parse(smsTemplateJson);\n\n for (let i = 0; i < smsTemplates.length; i++) {\n const smsTemplate = smsTemplates[i];\n this.logger.log(`Found ${smsTemplate.name} sms template`);\n\n // We need to load the actual template contents. \n if (smsTemplate.body) {\n const smsTemplateFilePath = path.join(process.cwd(), smsTemplate.body);\n smsTemplate.body = fs.readFileSync(smsTemplateFilePath, 'utf-8').toString()\n }\n\n // Save to DB.\n await this.smsTemplateService.removeByName(smsTemplate.name);\n await this.smsTemplateService.create(smsTemplate);\n }\n }\n }\n}"]}
@@ -1,10 +0,0 @@
1
- import { AuthenticationService } from '../services/authentication.service';
2
- import { UserService } from '../services/user.service';
3
- export declare class UserSeederService {
4
- private readonly authenticationService;
5
- private readonly userService;
6
- private readonly logger;
7
- constructor(authenticationService: AuthenticationService, userService: UserService);
8
- seed(): Promise<void>;
9
- }
10
- //# sourceMappingURL=user-seeder.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-seeder.service.d.ts","sourceRoot":"","sources":["../../src/seeders/user-seeder.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,qBACa,iBAAiB;IAItB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;gBAGxC,qBAAqB,EAAE,qBAAqB,EAC5C,WAAW,EAAE,WAAW;IAGvC,IAAI;CAkBb"}
@@ -1,44 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var UserSeederService_1;
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.UserSeederService = void 0;
14
- const common_1 = require("@nestjs/common");
15
- const authentication_service_1 = require("../services/authentication.service");
16
- const user_service_1 = require("../services/user.service");
17
- const uuid_1 = require("uuid");
18
- let UserSeederService = UserSeederService_1 = class UserSeederService {
19
- constructor(authenticationService, userService) {
20
- this.authenticationService = authenticationService;
21
- this.userService = userService;
22
- this.logger = new common_1.Logger(UserSeederService_1.name);
23
- }
24
- async seed() {
25
- let user = await this.userService.findOneByUsername("sa");
26
- if (!user) {
27
- user = await this.authenticationService.signUp({
28
- username: 'sa',
29
- email: 'sa@solidxai.com',
30
- password: (0, uuid_1.v4)(),
31
- });
32
- this.logger.log(`Newly created user is ${user}`);
33
- }
34
- await this.userService.addRoleToUser(user.email, "Admin");
35
- await this.userService.addRoleToUser(user.email, "Public");
36
- }
37
- };
38
- exports.UserSeederService = UserSeederService;
39
- exports.UserSeederService = UserSeederService = UserSeederService_1 = __decorate([
40
- (0, common_1.Injectable)(),
41
- __metadata("design:paramtypes", [authentication_service_1.AuthenticationService,
42
- user_service_1.UserService])
43
- ], UserSeederService);
44
- //# sourceMappingURL=user-seeder.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-seeder.service.js","sourceRoot":"","sources":["../../src/seeders/user-seeder.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,+EAA2E;AAC3E,2DAAuD;AACvD,+BAAoC;AAG7B,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAG1B,YACqB,qBAA4C,EAC5C,WAAwB;QADxB,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,gBAAW,GAAX,WAAW,CAAa;QAJ5B,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IAKzD,CAAC;IAEL,KAAK,CAAC,IAAI;QAEN,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE1D,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,IAAI,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;gBAC3C,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,iBAAiB;gBACxB,QAAQ,EAAE,IAAA,SAAM,GAAE;aACrB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAGD,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;CACJ,CAAA;AA1BY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAKmC,8CAAqB;QAC/B,0BAAW;GALpC,iBAAiB,CA0B7B","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport { AuthenticationService } from '../services/authentication.service';\nimport { UserService } from '../services/user.service';\nimport { v4 as uuidv4 } from 'uuid';\n\n@Injectable()\nexport class UserSeederService {\n private readonly logger = new Logger(UserSeederService.name);\n\n constructor(\n private readonly authenticationService: AuthenticationService,\n private readonly userService: UserService,\n ) { }\n\n async seed() {\n // see if the user already exists, \n let user = await this.userService.findOneByUsername(\"sa\");\n\n if (!user) {\n user = await this.authenticationService.signUp({\n username: 'sa',\n email: 'sa@solidxai.com',\n password: uuidv4(),\n }); \n\n this.logger.log(`Newly created user is ${user}`);\n }\n\n // now make this user an Admin by adding them to the Admin role group. \n await this.userService.addRoleToUser(user.email, \"Admin\");\n await this.userService.addRoleToUser(user.email, \"Public\");\n }\n}"]}
@@ -1,28 +0,0 @@
1
- import { Strategy } from 'passport-local';
2
- import { AuthGuard, PassportStrategy } from '@nestjs/passport';
3
- import { Injectable, UnauthorizedException } from '@nestjs/common';
4
- import { AuthenticationService } from '../services/authentication.service';
5
- import { UserService } from '../services/user.service';
6
-
7
-
8
- @Injectable()
9
- export class LocalStrategy extends PassportStrategy(Strategy) {
10
- constructor(
11
- private authService: AuthenticationService,
12
- private userService: UserService,
13
- ) {
14
- super();
15
- }
16
-
17
- async validate(username: string, password: string): Promise<any> {
18
- const user = await this.authService.validateUserAndRehashPasswordIfRequired({ username, password, email: null });
19
- if (!user) {
20
- throw new UnauthorizedException();
21
- }
22
- return user;
23
- }
24
- }
25
-
26
-
27
- @Injectable()
28
- export class LocalAuthGuard extends AuthGuard('local') { }
@@ -1,49 +0,0 @@
1
- import { Inject, Injectable, Logger } from '@nestjs/common';
2
- import * as fs from 'fs';
3
- import * as path from 'path';
4
- import type { SolidCoreSetting } from "src/services/settings/default-settings-provider.service";
5
-
6
- import { ConfigType } from '@nestjs/config';
7
- import { EmailTemplateService } from '../services/email-template.service';
8
- import { CreateEmailTemplateDto } from '../dtos/create-email-template.dto';
9
- import { SettingService } from 'src/services/setting.service';
10
-
11
- @Injectable()
12
- export class EmailTemplateSeederService {
13
- private readonly logger = new Logger(EmailTemplateSeederService.name);
14
-
15
- constructor(
16
- private readonly emailTemplateService: EmailTemplateService,
17
- private readonly settingService: SettingService
18
- ) { }
19
-
20
- async seed() {
21
- // Read the module metadata from a file specified in the .env
22
- const seedDataFileVariable = this.settingService.getConfigValue<SolidCoreSetting>("emailTemplateSeederFiles");
23
- const seedDataFiles = seedDataFileVariable.split(',');
24
-
25
- for (let i = 0; i < seedDataFiles.length; i++) {
26
- const seedDataFile = seedDataFiles[i];
27
- const fullPath = path.join(process.cwd(), seedDataFile);
28
-
29
- // For each module metadata seed file provided, read contents, parse & convert to a variable.
30
- this.logger.log(`Using email template seed data: ${fullPath}`);
31
- const emailTemplateJson = fs.readFileSync(fullPath, 'utf-8').toString();
32
- const emailTemplates: CreateEmailTemplateDto[] = JSON.parse(emailTemplateJson);
33
-
34
- for (let i = 0; i < emailTemplates.length; i++) {
35
- const emailTemplate = emailTemplates[i];
36
- this.logger.log(`Found ${emailTemplate.name} email template`);
37
-
38
- // We need to load the actual template contents.
39
- const emailTemplateFilePath = path.join(process.cwd(), emailTemplate.body);
40
- emailTemplate.body = fs.readFileSync(emailTemplateFilePath, 'utf-8').toString()
41
-
42
- // Save to DB.
43
- await this.emailTemplateService.removeByName(emailTemplate.name);
44
- await this.emailTemplateService.create(emailTemplate);
45
- }
46
-
47
- }
48
- }
49
- }