@solidxai/core 0.1.4 → 0.1.5-beta.1
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 +8 -0
- package/dist/constants/error-messages.d.ts +1 -0
- package/dist/constants/error-messages.d.ts.map +1 -1
- package/dist/constants/error-messages.js +1 -0
- package/dist/constants/error-messages.js.map +1 -1
- package/dist/constants.d.ts +3 -3
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +12 -12
- package/dist/constants.js.map +1 -1
- package/dist/controllers/otp-authentication.controller.d.ts +1 -4
- package/dist/controllers/otp-authentication.controller.d.ts.map +1 -1
- package/dist/controllers/otp-authentication.controller.js +1 -1
- package/dist/controllers/role-metadata.controller.d.ts +1 -0
- package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/role-metadata.controller.js +15 -0
- package/dist/controllers/role-metadata.controller.js.map +1 -1
- package/dist/controllers/view-metadata.controller.d.ts +1 -0
- package/dist/controllers/view-metadata.controller.d.ts.map +1 -1
- package/dist/dtos/create-email-template.dto.d.ts.map +1 -1
- package/dist/dtos/create-email-template.dto.js.map +1 -1
- package/dist/dtos/create-list-of-values.dto.d.ts.map +1 -1
- package/dist/dtos/create-list-of-values.dto.js.map +1 -1
- package/dist/dtos/create-menu-item-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-menu-item-metadata.dto.js.map +1 -1
- package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-role-metadata.dto.js.map +1 -1
- package/dist/dtos/create-saved-filters.dto.d.ts +1 -0
- package/dist/dtos/create-saved-filters.dto.d.ts.map +1 -1
- package/dist/dtos/create-saved-filters.dto.js +8 -1
- package/dist/dtos/create-saved-filters.dto.js.map +1 -1
- package/dist/dtos/create-scheduled-job.dto.d.ts.map +1 -1
- package/dist/dtos/create-scheduled-job.dto.js.map +1 -1
- package/dist/dtos/create-security-rule.dto.d.ts.map +1 -1
- package/dist/dtos/create-security-rule.dto.js.map +1 -1
- package/dist/dtos/create-sms-template.dto.d.ts.map +1 -1
- package/dist/dtos/create-sms-template.dto.js.map +1 -1
- package/dist/dtos/create-view-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-view-metadata.dto.js.map +1 -1
- package/dist/dtos/otp-sign-in.dto.d.ts +1 -1
- package/dist/dtos/otp-sign-in.dto.d.ts.map +1 -1
- package/dist/dtos/otp-sign-in.dto.js +2 -2
- package/dist/dtos/otp-sign-in.dto.js.map +1 -1
- package/dist/dtos/otp-sign-up.dto.d.ts +2 -2
- package/dist/dtos/otp-sign-up.dto.d.ts.map +1 -1
- package/dist/dtos/otp-sign-up.dto.js +2 -2
- package/dist/dtos/otp-sign-up.dto.js.map +1 -1
- package/dist/dtos/resolve-s3-url.dto.d.ts +2 -5
- package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -1
- package/dist/dtos/resolve-s3-url.dto.js +1 -13
- package/dist/dtos/resolve-s3-url.dto.js.map +1 -1
- package/dist/dtos/sign-up.dto.d.ts.map +1 -1
- package/dist/dtos/sign-up.dto.js.map +1 -1
- package/dist/dtos/update-email-template.dto.d.ts.map +1 -1
- package/dist/dtos/update-email-template.dto.js.map +1 -1
- package/dist/dtos/update-list-of-values.dto.d.ts.map +1 -1
- package/dist/dtos/update-list-of-values.dto.js.map +1 -1
- package/dist/dtos/update-menu-item-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/update-menu-item-metadata.dto.js.map +1 -1
- package/dist/dtos/update-saved-filters.dto.d.ts +1 -0
- package/dist/dtos/update-saved-filters.dto.d.ts.map +1 -1
- package/dist/dtos/update-saved-filters.dto.js +10 -1
- package/dist/dtos/update-saved-filters.dto.js.map +1 -1
- package/dist/dtos/update-scheduled-job.dto.d.ts.map +1 -1
- package/dist/dtos/update-scheduled-job.dto.js.map +1 -1
- package/dist/dtos/update-security-rule.dto.d.ts.map +1 -1
- package/dist/dtos/update-security-rule.dto.js.map +1 -1
- package/dist/dtos/update-sms-template.dto.d.ts.map +1 -1
- package/dist/dtos/update-sms-template.dto.js.map +1 -1
- package/dist/dtos/update-view-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/update-view-metadata.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 +1 -0
- package/dist/entities/chatter-message-details.entity.js.map +1 -1
- package/dist/entities/chatter-message.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message.entity.js +1 -0
- package/dist/entities/chatter-message.entity.js.map +1 -1
- package/dist/entities/common.entity.js +4 -4
- package/dist/entities/common.entity.js.map +1 -1
- package/dist/entities/legacy-common.entity.js +4 -4
- package/dist/entities/legacy-common.entity.js.map +1 -1
- package/dist/entities/saved-filters.entity.d.ts +1 -0
- package/dist/entities/saved-filters.entity.d.ts.map +1 -1
- package/dist/entities/saved-filters.entity.js +6 -1
- package/dist/entities/saved-filters.entity.js.map +1 -1
- package/dist/entities/user.entity.d.ts +1 -0
- package/dist/entities/user.entity.d.ts.map +1 -1
- package/dist/entities/user.entity.js +6 -1
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +2 -0
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +33 -23
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +3 -0
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +36 -23
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
- package/dist/helpers/security.helper.js +1 -0
- package/dist/helpers/security.helper.js.map +1 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/repository/solid-base.repository.d.ts +10 -1
- package/dist/repository/solid-base.repository.d.ts.map +1 -1
- package/dist/repository/solid-base.repository.js +109 -0
- package/dist/repository/solid-base.repository.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts +2 -0
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +142 -72
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.d.ts +1 -1
- package/dist/seeders/permission-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.js +1 -1
- package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +23 -25
- package/dist/services/authentication.service.d.ts +22 -8
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +230 -214
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/crud-helper.service.d.ts +4 -0
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +66 -32
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +7 -4
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/file/disk-file.service.d.ts +0 -2
- package/dist/services/file/disk-file.service.d.ts.map +1 -1
- package/dist/services/file/disk-file.service.js +7 -16
- package/dist/services/file/disk-file.service.js.map +1 -1
- package/dist/services/file/index.d.ts +1 -0
- package/dist/services/file/index.d.ts.map +1 -1
- package/dist/services/file/index.js +1 -0
- package/dist/services/file/index.js.map +1 -1
- package/dist/services/file/storage-path-builder.d.ts +17 -0
- package/dist/services/file/storage-path-builder.d.ts.map +1 -0
- package/dist/{seeders/sms-template-seeder.service.js → services/file/storage-path-builder.js} +45 -35
- package/dist/services/file/storage-path-builder.js.map +1 -0
- package/dist/services/media.service.d.ts +1 -1
- package/dist/services/media.service.d.ts.map +1 -1
- package/dist/services/media.service.js +45 -6
- package/dist/services/media.service.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.js +46 -7
- package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
- package/dist/services/module-metadata.service.d.ts +4 -6
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +16 -14
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/setting.service.d.ts +3 -2
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +7 -4
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/settings/default-settings-provider.service.d.ts +24 -2
- package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
- package/dist/services/settings/default-settings-provider.service.js +8 -6
- package/dist/services/settings/default-settings-provider.service.js.map +1 -1
- package/dist/services/view-metadata.service.d.ts +1 -0
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +25 -1
- package/dist/services/view-metadata.service.js.map +1 -1
- package/dist/solid-core.module.d.ts +3 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +45 -9
- package/dist/solid-core.module.js.map +1 -1
- package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
- package/dist/testing/adapters/ui/playwright-adapter.js +35 -2
- package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts +4 -3
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.js +20 -2
- package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -1
- package/package.json +8 -2
- package/src/constants/error-messages.ts +1 -0
- package/src/constants.ts +3 -3
- package/src/controllers/role-metadata.controller.ts +26 -18
- package/src/dtos/create-email-template.dto.ts +7 -0
- package/src/dtos/create-list-of-values.dto.ts +7 -0
- package/src/dtos/create-menu-item-metadata.dto.ts +12 -1
- package/src/dtos/create-role-metadata.dto.ts +9 -0
- package/src/dtos/create-saved-filters.dto.ts +7 -0
- package/src/dtos/create-scheduled-job.dto.ts +14 -0
- package/src/dtos/create-security-rule.dto.ts +6 -0
- package/src/dtos/create-sms-template.dto.ts +6 -0
- package/src/dtos/create-view-metadata.dto.ts +11 -0
- package/src/dtos/otp-sign-in.dto.ts +3 -3
- package/src/dtos/otp-sign-up.dto.ts +3 -3
- package/src/dtos/resolve-s3-url.dto.ts +2 -12
- package/src/dtos/sign-up.dto.ts +0 -2
- package/src/dtos/update-email-template.dto.ts +6 -0
- package/src/dtos/update-list-of-values.dto.ts +8 -0
- package/src/dtos/update-menu-item-metadata.dto.ts +12 -0
- package/src/dtos/update-saved-filters.dto.ts +5 -1
- package/src/dtos/update-scheduled-job.dto.ts +15 -0
- package/src/dtos/update-security-rule.dto.ts +7 -0
- package/src/dtos/update-sms-template.dto.ts +32 -32
- package/src/dtos/update-view-metadata.dto.ts +12 -0
- package/src/entities/chatter-message-details.entity.ts +1 -0
- package/src/entities/chatter-message.entity.ts +1 -0
- package/src/entities/common.entity.ts +5 -5
- package/src/entities/legacy-common.entity.ts +5 -5
- package/src/entities/saved-filters.entity.ts +3 -0
- package/src/entities/user.entity.ts +4 -1
- package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +43 -32
- package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +45 -33
- package/src/helpers/security.helper.ts +1 -1
- package/src/index.ts +0 -4
- package/src/repository/solid-base.repository.ts +172 -1
- package/src/seeders/module-metadata-seeder.service.ts +189 -127
- package/src/seeders/permission-metadata-seeder.service.ts +1 -4
- package/src/seeders/seed-data/solid-core-metadata.json +30 -32
- package/src/services/authentication.service.ts +273 -269
- package/src/services/crud-helper.service.ts +79 -36
- package/src/services/crud.service.ts +9 -4
- package/src/services/field-metadata.service.ts +0 -71
- package/src/services/file/disk-file.service.ts +8 -18
- package/src/services/file/index.ts +1 -0
- package/src/services/file/storage-path-builder.ts +56 -0
- package/src/services/media.service.ts +13 -7
- package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +1 -1
- package/src/services/mediaStorageProviders/file-storage-provider.ts +13 -8
- package/src/services/module-metadata.service.ts +18 -15
- package/src/services/setting.service.ts +5 -3
- package/src/services/settings/default-settings-provider.service.ts +5 -3
- package/src/services/view-metadata.service.ts +29 -1
- package/src/solid-core.module.ts +16 -12
- package/src/testing/adapters/ui/playwright-adapter.ts +1 -1
- package/src/transformers/typeorm/local-date-time-transformer.ts +21 -3
- package/dist/passport-strategies/local.strategy.d.ts +0 -15
- package/dist/passport-strategies/local.strategy.d.ts.map +0 -1
- package/dist/passport-strategies/local.strategy.js +0 -44
- package/dist/passport-strategies/local.strategy.js.map +0 -1
- package/dist/seeders/email-template-seeder.service.d.ts +0 -10
- package/dist/seeders/email-template-seeder.service.d.ts.map +0 -1
- package/dist/seeders/email-template-seeder.service.js +0 -84
- package/dist/seeders/email-template-seeder.service.js.map +0 -1
- package/dist/seeders/sms-template-seeder.service.d.ts +0 -10
- package/dist/seeders/sms-template-seeder.service.d.ts.map +0 -1
- package/dist/seeders/sms-template-seeder.service.js.map +0 -1
- package/dist/seeders/user-seeder.service.d.ts +0 -10
- package/dist/seeders/user-seeder.service.d.ts.map +0 -1
- package/dist/seeders/user-seeder.service.js +0 -44
- package/dist/seeders/user-seeder.service.js.map +0 -1
- package/src/passport-strategies/local.strategy.ts +0 -28
- package/src/seeders/email-template-seeder.service.ts +0 -49
- package/src/seeders/sms-template-seeder.service.ts +0 -50
- package/src/seeders/user-seeder.service.ts +0 -33
- package/src/workflow.readme.md +0 -25
|
@@ -5,32 +5,39 @@ export class UpdateSecurityRuleDto {
|
|
|
5
5
|
@IsOptional()
|
|
6
6
|
@IsInt()
|
|
7
7
|
id: number;
|
|
8
|
+
|
|
8
9
|
@IsNotEmpty()
|
|
9
10
|
@IsOptional()
|
|
10
11
|
@IsString()
|
|
11
12
|
@ApiProperty()
|
|
12
13
|
name: string;
|
|
14
|
+
|
|
13
15
|
@IsNotEmpty()
|
|
14
16
|
@IsOptional()
|
|
15
17
|
@IsString()
|
|
16
18
|
@ApiProperty()
|
|
17
19
|
description: string;
|
|
20
|
+
|
|
18
21
|
@IsOptional()
|
|
19
22
|
@IsInt()
|
|
20
23
|
@ApiProperty()
|
|
21
24
|
roleId: number;
|
|
25
|
+
|
|
22
26
|
@IsString()
|
|
23
27
|
@IsOptional()
|
|
24
28
|
@ApiProperty()
|
|
25
29
|
roleUserKey: string;
|
|
30
|
+
|
|
26
31
|
@IsOptional()
|
|
27
32
|
@IsInt()
|
|
28
33
|
@ApiProperty()
|
|
29
34
|
modelMetadataId: number;
|
|
35
|
+
|
|
30
36
|
@IsString()
|
|
31
37
|
@IsOptional()
|
|
32
38
|
@ApiProperty()
|
|
33
39
|
modelMetadataUserKey: string;
|
|
40
|
+
|
|
34
41
|
@IsNotEmpty()
|
|
35
42
|
@IsOptional()
|
|
36
43
|
@IsJSON()
|
|
@@ -3,42 +3,42 @@ import { CreateSmsTemplateDto } from './create-sms-template.dto';
|
|
|
3
3
|
import { IsString } from 'class-validator';
|
|
4
4
|
import { IsOptional, Matches, IsNotEmpty, IsBoolean } from 'class-validator';
|
|
5
5
|
|
|
6
|
-
export class UpdateSmsTemplateDto extends PartialType(CreateSmsTemplateDto) {
|
|
7
|
-
@IsOptional()
|
|
8
|
-
@IsString()
|
|
9
|
-
@ApiProperty()
|
|
10
|
-
type: string;
|
|
6
|
+
export class UpdateSmsTemplateDto extends PartialType(CreateSmsTemplateDto) {
|
|
7
|
+
@IsOptional()
|
|
8
|
+
@IsString()
|
|
9
|
+
@ApiProperty()
|
|
10
|
+
type: string;
|
|
11
11
|
|
|
12
|
-
@IsNotEmpty()
|
|
13
|
-
@IsOptional()
|
|
14
|
-
@Matches(/[a-z]+(-[a-z]+)*/)
|
|
15
|
-
@IsString()
|
|
16
|
-
@ApiProperty()
|
|
17
|
-
name: string;
|
|
12
|
+
@IsNotEmpty()
|
|
13
|
+
@IsOptional()
|
|
14
|
+
@Matches(/[a-z]+(-[a-z]+)*/)
|
|
15
|
+
@IsString()
|
|
16
|
+
@ApiProperty()
|
|
17
|
+
name: string;
|
|
18
18
|
|
|
19
|
-
@IsOptional()
|
|
20
|
-
@IsString()
|
|
21
|
-
@ApiProperty()
|
|
22
|
-
smsProviderTemplateId: string;
|
|
19
|
+
@IsOptional()
|
|
20
|
+
@IsString()
|
|
21
|
+
@ApiProperty()
|
|
22
|
+
smsProviderTemplateId: string;
|
|
23
23
|
|
|
24
|
-
@IsNotEmpty()
|
|
25
|
-
@IsOptional()
|
|
26
|
-
@IsString()
|
|
27
|
-
@ApiProperty()
|
|
28
|
-
displayName: string;
|
|
24
|
+
@IsNotEmpty()
|
|
25
|
+
@IsOptional()
|
|
26
|
+
@IsString()
|
|
27
|
+
@ApiProperty()
|
|
28
|
+
displayName: string;
|
|
29
29
|
|
|
30
|
-
@IsOptional()
|
|
31
|
-
@IsString()
|
|
32
|
-
@ApiProperty()
|
|
33
|
-
body: string;
|
|
30
|
+
@IsOptional()
|
|
31
|
+
@IsString()
|
|
32
|
+
@ApiProperty()
|
|
33
|
+
body: string;
|
|
34
34
|
|
|
35
|
-
@IsOptional()
|
|
36
|
-
@IsString()
|
|
37
|
-
@ApiProperty()
|
|
38
|
-
description: string;
|
|
35
|
+
@IsOptional()
|
|
36
|
+
@IsString()
|
|
37
|
+
@ApiProperty()
|
|
38
|
+
description: string;
|
|
39
39
|
|
|
40
|
-
@IsOptional()
|
|
41
|
-
@IsBoolean()
|
|
42
|
-
@ApiProperty()
|
|
43
|
-
active: boolean;
|
|
40
|
+
@IsOptional()
|
|
41
|
+
@IsBoolean()
|
|
42
|
+
@ApiProperty()
|
|
43
|
+
active: boolean;
|
|
44
44
|
} { }
|
|
@@ -7,58 +7,70 @@ export class UpdateViewMetadataDto {
|
|
|
7
7
|
@IsOptional()
|
|
8
8
|
@IsInt()
|
|
9
9
|
id: number;
|
|
10
|
+
|
|
10
11
|
@IsNotEmpty()
|
|
11
12
|
@IsOptional()
|
|
12
13
|
@Matches(/[a-z]+(-[a-z]+)*/)
|
|
13
14
|
@IsString()
|
|
14
15
|
@ApiProperty()
|
|
15
16
|
name: string;
|
|
17
|
+
|
|
16
18
|
@IsNotEmpty()
|
|
17
19
|
@IsOptional()
|
|
18
20
|
@IsString()
|
|
19
21
|
@ApiProperty()
|
|
20
22
|
displayName: string;
|
|
23
|
+
|
|
21
24
|
@IsNotEmpty()
|
|
22
25
|
@IsOptional()
|
|
23
26
|
@IsString()
|
|
24
27
|
@ApiProperty()
|
|
25
28
|
type: string;
|
|
29
|
+
|
|
26
30
|
@IsNotEmpty()
|
|
27
31
|
@IsOptional()
|
|
28
32
|
@IsJSON()
|
|
29
33
|
@ApiProperty()
|
|
30
34
|
context: any;
|
|
35
|
+
|
|
31
36
|
@IsNotEmpty()
|
|
32
37
|
@IsOptional()
|
|
33
38
|
@IsJSON()
|
|
34
39
|
@ApiProperty()
|
|
35
40
|
layout: any;
|
|
41
|
+
|
|
36
42
|
@IsOptional()
|
|
37
43
|
@IsInt()
|
|
38
44
|
@ApiProperty()
|
|
39
45
|
moduleId: number;
|
|
46
|
+
|
|
40
47
|
@IsString()
|
|
41
48
|
@IsOptional()
|
|
42
49
|
@ApiProperty()
|
|
43
50
|
moduleUserKey: string;
|
|
51
|
+
|
|
44
52
|
@IsOptional()
|
|
45
53
|
@IsInt()
|
|
46
54
|
@ApiProperty()
|
|
47
55
|
modelId: number;
|
|
56
|
+
|
|
48
57
|
@IsString()
|
|
49
58
|
@IsOptional()
|
|
50
59
|
@ApiProperty()
|
|
51
60
|
modelUserKey: string;
|
|
61
|
+
|
|
52
62
|
@IsOptional()
|
|
53
63
|
@ApiProperty()
|
|
54
64
|
@IsArray()
|
|
55
65
|
@ValidateNested({ each: true })
|
|
56
66
|
@Type(() => UpdateUserViewMetadataDto)
|
|
57
67
|
userViewMetadata: UpdateUserViewMetadataDto[];
|
|
68
|
+
|
|
58
69
|
@IsOptional()
|
|
59
70
|
@IsArray()
|
|
60
71
|
@ApiProperty()
|
|
61
72
|
userViewMetadataIds: number[];
|
|
73
|
+
|
|
62
74
|
@IsString()
|
|
63
75
|
@IsOptional()
|
|
64
76
|
@ApiProperty()
|
|
@@ -3,6 +3,7 @@ import { Entity, JoinColumn, ManyToOne, Column, Index } from 'typeorm';
|
|
|
3
3
|
import { ChatterMessage } from 'src/entities/chatter-message.entity'
|
|
4
4
|
@Entity("ss_chatter_message_details")
|
|
5
5
|
export class ChatterMessageDetails extends CommonEntity {
|
|
6
|
+
@Index()
|
|
6
7
|
@ManyToOne(() => ChatterMessage, { nullable: true })
|
|
7
8
|
@JoinColumn()
|
|
8
9
|
chatterMessage: ChatterMessage;
|
|
@@ -3,6 +3,7 @@ import { Entity, Column, Index, JoinColumn, ManyToOne, OneToMany } from 'typeorm
|
|
|
3
3
|
import { User } from 'src/entities/user.entity'
|
|
4
4
|
import { ChatterMessageDetails } from './chatter-message-details.entity';
|
|
5
5
|
|
|
6
|
+
@Index(["coModelName", "coModelEntityId"])
|
|
6
7
|
@Entity("ss_chatter_message")
|
|
7
8
|
export class ChatterMessage extends CommonEntity {
|
|
8
9
|
@Index()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Column, CreateDateColumn, DeleteDateColumn, Index, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
|
|
2
2
|
import { Exclude, Expose } from "class-transformer";
|
|
3
|
-
import {
|
|
3
|
+
import { UtcDateTimeTransformer } from "src/transformers/typeorm/local-date-time-transformer";
|
|
4
4
|
|
|
5
5
|
@Exclude()
|
|
6
6
|
export abstract class CommonEntity {
|
|
@@ -8,13 +8,13 @@ export abstract class CommonEntity {
|
|
|
8
8
|
@PrimaryGeneratedColumn({ type: 'integer' })
|
|
9
9
|
id: number
|
|
10
10
|
|
|
11
|
-
@CreateDateColumn({ name: "created_at", transformer:
|
|
11
|
+
@CreateDateColumn({ name: "created_at", transformer: UtcDateTimeTransformer })
|
|
12
12
|
createdAt: Date;
|
|
13
13
|
|
|
14
|
-
@UpdateDateColumn({ name: "updated_at", transformer:
|
|
14
|
+
@UpdateDateColumn({ name: "updated_at", transformer: UtcDateTimeTransformer })
|
|
15
15
|
updatedAt: Date;
|
|
16
16
|
|
|
17
|
-
@DeleteDateColumn({ name: "deleted_at", transformer:
|
|
17
|
+
@DeleteDateColumn({ name: "deleted_at", transformer: UtcDateTimeTransformer })
|
|
18
18
|
@Index()
|
|
19
19
|
deletedAt: Date;
|
|
20
20
|
|
|
@@ -22,7 +22,7 @@ export abstract class CommonEntity {
|
|
|
22
22
|
deletedTracker: string;
|
|
23
23
|
|
|
24
24
|
@Expose()
|
|
25
|
-
@Column({ name: 'published_at', default: null, nullable: true, transformer:
|
|
25
|
+
@Column({ name: 'published_at', default: null, nullable: true, transformer: UtcDateTimeTransformer })
|
|
26
26
|
publishedAt: Date;
|
|
27
27
|
|
|
28
28
|
@Expose()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Exclude, Expose, Type } from "class-transformer";
|
|
2
2
|
import { Column, CreateDateColumn, DeleteDateColumn, Index, JoinColumn, ManyToOne, UpdateDateColumn } from "typeorm";
|
|
3
3
|
import type { User } from "./user.entity";
|
|
4
|
-
import {
|
|
4
|
+
import { UtcDateTimeTransformer } from "src/transformers/typeorm/local-date-time-transformer";
|
|
5
5
|
|
|
6
6
|
export const LEGACY_TABLE_FIELDS_PREFIX = 'ss';
|
|
7
7
|
|
|
@@ -12,13 +12,13 @@ export abstract class LegacyCommonEntity {
|
|
|
12
12
|
// @Generated("increment")
|
|
13
13
|
// id: number
|
|
14
14
|
|
|
15
|
-
@CreateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_at`, transformer:
|
|
15
|
+
@CreateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_at`, transformer: UtcDateTimeTransformer })
|
|
16
16
|
createdAt: Date;
|
|
17
17
|
|
|
18
|
-
@UpdateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_at`, transformer:
|
|
18
|
+
@UpdateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_at`, transformer: UtcDateTimeTransformer })
|
|
19
19
|
updatedAt: Date;
|
|
20
20
|
|
|
21
|
-
@DeleteDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_deleted_at`, transformer:
|
|
21
|
+
@DeleteDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_deleted_at`, transformer: UtcDateTimeTransformer })
|
|
22
22
|
@Index()
|
|
23
23
|
deletedAt: Date;
|
|
24
24
|
|
|
@@ -26,7 +26,7 @@ export abstract class LegacyCommonEntity {
|
|
|
26
26
|
deletedTracker: string;
|
|
27
27
|
|
|
28
28
|
@Expose()
|
|
29
|
-
@Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_published_at`, default: null, nullable: true, transformer:
|
|
29
|
+
@Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_published_at`, default: null, nullable: true, transformer: UtcDateTimeTransformer })
|
|
30
30
|
publishedAt: Date;
|
|
31
31
|
|
|
32
32
|
@Expose()
|
|
@@ -10,7 +10,7 @@ import { Exclude, Expose } from "class-transformer";
|
|
|
10
10
|
export class User extends CommonEntity {
|
|
11
11
|
@Column({ type: "varchar", nullable: true })
|
|
12
12
|
@Expose()
|
|
13
|
-
fullName: string;
|
|
13
|
+
fullName: string;
|
|
14
14
|
@Index({ unique: true })
|
|
15
15
|
@Column({ type: "varchar" })
|
|
16
16
|
@Expose()
|
|
@@ -111,6 +111,9 @@ export class User extends CommonEntity {
|
|
|
111
111
|
// dont send to client
|
|
112
112
|
@Column({ nullable: true })
|
|
113
113
|
rehashedAt: Date;
|
|
114
|
+
// dont send to client
|
|
115
|
+
@Column({ type: "int", default: 0 })
|
|
116
|
+
failedLoginAttempts: number = 0;
|
|
114
117
|
@Expose()
|
|
115
118
|
_media: any;
|
|
116
119
|
}
|
|
@@ -14,6 +14,8 @@ export interface ManyToManyRelationFieldOptions {
|
|
|
14
14
|
entityManager: EntityManager;
|
|
15
15
|
fieldName: string;
|
|
16
16
|
relationCoModelFieldName?: string;
|
|
17
|
+
isUpdate?: boolean;
|
|
18
|
+
entityId?: number;
|
|
17
19
|
}
|
|
18
20
|
|
|
19
21
|
const linkCommands = [RelationFieldsCommand.link, RelationFieldsCommand.unlink, RelationFieldsCommand.set];
|
|
@@ -74,16 +76,21 @@ export class ManyToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
|
74
76
|
const relatedEntityName = classify(this.options.relationCoModelSingularName);
|
|
75
77
|
const relatedEntityRepository = this.options.entityManager.getRepository(relatedEntityName)
|
|
76
78
|
|
|
77
|
-
|
|
79
|
+
const result = await this.transformByCommand(dto, relatedEntityRepository, currentEntityRepository);
|
|
80
|
+
if (result !== undefined) {
|
|
81
|
+
dto[this.valueFieldName] = result;
|
|
82
|
+
} else {
|
|
83
|
+
delete dto[this.valueFieldName];
|
|
84
|
+
}
|
|
78
85
|
return dto;
|
|
79
86
|
}
|
|
80
87
|
|
|
81
|
-
private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[]> {
|
|
88
|
+
private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[] | undefined> {
|
|
82
89
|
// TODO : Need to add support for the multiple commands
|
|
83
90
|
const command = dto[this.commandFieldName];
|
|
84
91
|
const values = dto[this.valueFieldName];
|
|
85
92
|
const ids = dto[this.idFieldName];
|
|
86
|
-
|
|
93
|
+
|
|
87
94
|
switch (command) {
|
|
88
95
|
case RelationFieldsCommand.create:
|
|
89
96
|
return await this.transformForCommandCreate(values, relatedEntityRepository);
|
|
@@ -94,15 +101,15 @@ export class ManyToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
|
94
101
|
case RelationFieldsCommand.clear:
|
|
95
102
|
return this.transformForCommandClear();
|
|
96
103
|
case RelationFieldsCommand.set:
|
|
97
|
-
return await this.transformForCommandSet(ids, relatedEntityRepository
|
|
104
|
+
return await this.transformForCommandSet(ids, relatedEntityRepository);
|
|
98
105
|
case RelationFieldsCommand.link:
|
|
99
|
-
return await this.tranformForCommandLink(ids, relatedEntityRepository
|
|
106
|
+
return await this.tranformForCommandLink(ids, relatedEntityRepository);
|
|
100
107
|
case RelationFieldsCommand.unlink:
|
|
101
|
-
return await this.transformForCommandUnLink(ids
|
|
108
|
+
return await this.transformForCommandUnLink(ids);
|
|
102
109
|
default:
|
|
103
110
|
this.logger.log(`Invalid command ${command}`);
|
|
104
111
|
return null;
|
|
105
|
-
|
|
112
|
+
|
|
106
113
|
}
|
|
107
114
|
}
|
|
108
115
|
|
|
@@ -110,46 +117,50 @@ export class ManyToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
|
110
117
|
return []
|
|
111
118
|
}
|
|
112
119
|
|
|
113
|
-
private async transformForCommandSet(ids: any[], relatedEntityRepository: any
|
|
114
|
-
// Load the entities with the ids passed
|
|
120
|
+
private async transformForCommandSet(ids: any[], relatedEntityRepository: any): Promise<any[]> {
|
|
115
121
|
const loadedEntities: any[] = await relatedEntityRepository.find({
|
|
116
|
-
where : {id: In(ids) }
|
|
122
|
+
where : {id: In(ids) }
|
|
117
123
|
})
|
|
118
124
|
if (loadedEntities.length !== ids.length) {
|
|
119
|
-
throw new Error('Invalid entity ids provided for
|
|
125
|
+
throw new Error('Invalid entity ids provided for set');
|
|
120
126
|
}
|
|
121
127
|
|
|
122
128
|
return loadedEntities;
|
|
123
129
|
}
|
|
124
130
|
|
|
125
|
-
private async tranformForCommandLink(ids: any, relatedEntityRepository: any
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
131
|
+
private async tranformForCommandLink(ids: any[], relatedEntityRepository: any): Promise<undefined> {
|
|
132
|
+
if (!this.options.isUpdate) {
|
|
133
|
+
throw new Error('Link command is only supported for update operations');
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const count: number = await relatedEntityRepository.count({
|
|
137
|
+
where: { id: In(ids) }
|
|
138
|
+
});
|
|
139
|
+
if (count !== ids.length) {
|
|
132
140
|
throw new Error('Invalid entity ids provided for linking');
|
|
133
141
|
}
|
|
134
|
-
tranformedRelatedFields.push(...loadedEntities);
|
|
135
142
|
|
|
136
|
-
|
|
143
|
+
await this.options.entityManager
|
|
144
|
+
.createQueryBuilder()
|
|
145
|
+
.relation(classify(this.options.modelSingularName), this.valueFieldName)
|
|
146
|
+
.of(this.options.entityId)
|
|
147
|
+
.add(ids);
|
|
148
|
+
|
|
149
|
+
return undefined;
|
|
137
150
|
}
|
|
138
151
|
|
|
139
|
-
private async transformForCommandUnLink(ids: any
|
|
140
|
-
if (
|
|
141
|
-
throw new Error('
|
|
142
|
-
}
|
|
152
|
+
private async transformForCommandUnLink(ids: any[]): Promise<undefined> {
|
|
153
|
+
if (!this.options.isUpdate) {
|
|
154
|
+
throw new Error('Unlink command is only supported for update operations');
|
|
155
|
+
}
|
|
143
156
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
const filteredEntities = entityInstance[this.valueFieldName].filter((entity) => !ids.includes(entity.id));
|
|
150
|
-
tranformedRelatedFields.push(...filteredEntities);
|
|
157
|
+
await this.options.entityManager
|
|
158
|
+
.createQueryBuilder()
|
|
159
|
+
.relation(classify(this.options.modelSingularName), this.valueFieldName)
|
|
160
|
+
.of(this.options.entityId)
|
|
161
|
+
.remove(ids);
|
|
151
162
|
|
|
152
|
-
return
|
|
163
|
+
return undefined;
|
|
153
164
|
}
|
|
154
165
|
|
|
155
166
|
private async transformForCommandCreate(values: any[], relatedEntityRepository: any): Promise<any[]> {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { classify } from "@angular-devkit/core/src/utils/strings";
|
|
2
|
+
import { Logger } from "@nestjs/common";
|
|
2
3
|
import { isEmpty, isEnum, isInt, isNotEmpty } from "class-validator";
|
|
3
4
|
import { RelationFieldsCommand } from "src/dtos/create-field-metadata.dto";
|
|
4
|
-
import { FieldMetadata } from "src/entities/field-metadata.entity";
|
|
5
5
|
import { FieldCrudManager, ValidationError } from "src/interfaces";
|
|
6
6
|
import { EntityManager, In } from "typeorm";
|
|
7
7
|
|
|
@@ -13,12 +13,15 @@ export interface OneToManyRelationFieldOptions {
|
|
|
13
13
|
modelSingularName: string | undefined | null;
|
|
14
14
|
inverseFieldName: string | undefined | null;
|
|
15
15
|
entityManager: EntityManager | undefined | null;
|
|
16
|
+
isUpdate?: boolean;
|
|
17
|
+
entityId?: number;
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
const linkCommands = [RelationFieldsCommand.link, RelationFieldsCommand.unlink, RelationFieldsCommand.set];
|
|
19
21
|
|
|
20
22
|
// This implementation is meant to be used for many-to-one relation field
|
|
21
23
|
export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
24
|
+
private readonly logger = new Logger(OneToManyRelationFieldCrudManager.name);
|
|
22
25
|
|
|
23
26
|
private readonly valueFieldName: string;
|
|
24
27
|
private readonly idFieldName: string;
|
|
@@ -74,18 +77,22 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
|
74
77
|
}
|
|
75
78
|
|
|
76
79
|
async transformForCreate(dto: any): Promise<any> {
|
|
77
|
-
// const relatedFieldData: any[] = dto[this.fieldName()];
|
|
78
80
|
const currentEntityName = classify(this.options.modelSingularName);
|
|
79
81
|
const currentEntityRepository = this.options.entityManager.getRepository(currentEntityName);
|
|
80
82
|
|
|
81
83
|
const relatedEntityName = classify(this.options.relationCoModelSingularName);
|
|
82
84
|
const relatedEntityRepository = this.options.entityManager.getRepository(relatedEntityName);
|
|
83
85
|
|
|
84
|
-
|
|
86
|
+
const result = await this.transformByCommand(dto, relatedEntityRepository, currentEntityRepository);
|
|
87
|
+
if (result !== undefined) {
|
|
88
|
+
dto[this.valueFieldName] = result;
|
|
89
|
+
} else {
|
|
90
|
+
delete dto[this.valueFieldName];
|
|
91
|
+
}
|
|
85
92
|
return dto;
|
|
86
93
|
}
|
|
87
94
|
|
|
88
|
-
private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[]> {
|
|
95
|
+
private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[] | undefined> {
|
|
89
96
|
// TODO : Need to add support for the multiple commands
|
|
90
97
|
const command = dto[this.commandFieldName];
|
|
91
98
|
const values = dto[this.valueFieldName];
|
|
@@ -101,13 +108,14 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
|
101
108
|
case RelationFieldsCommand.clear:
|
|
102
109
|
return this.transformForCommandClear();
|
|
103
110
|
case RelationFieldsCommand.set:
|
|
104
|
-
return await this.transformForCommandSet(ids, relatedEntityRepository
|
|
111
|
+
return await this.transformForCommandSet(ids, relatedEntityRepository);
|
|
105
112
|
case RelationFieldsCommand.link:
|
|
106
|
-
return await this.tranformForCommandLink(ids, relatedEntityRepository
|
|
113
|
+
return await this.tranformForCommandLink(ids, relatedEntityRepository);
|
|
107
114
|
case RelationFieldsCommand.unlink:
|
|
108
|
-
return await this.transformForCommandUnLink(ids
|
|
115
|
+
return await this.transformForCommandUnLink(ids);
|
|
109
116
|
default:
|
|
110
|
-
|
|
117
|
+
this.logger.log(`Invalid command ${command}`);
|
|
118
|
+
return null;
|
|
111
119
|
}
|
|
112
120
|
}
|
|
113
121
|
|
|
@@ -115,46 +123,50 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
|
115
123
|
return []
|
|
116
124
|
}
|
|
117
125
|
|
|
118
|
-
private async transformForCommandSet(ids: any[], relatedEntityRepository: any
|
|
119
|
-
// Load the entities with the ids passed
|
|
126
|
+
private async transformForCommandSet(ids: any[], relatedEntityRepository: any): Promise<any[]> {
|
|
120
127
|
const loadedEntities: any[] = await relatedEntityRepository.find({
|
|
121
|
-
where : {id: In(ids) }
|
|
128
|
+
where : {id: In(ids) }
|
|
122
129
|
})
|
|
123
130
|
if (loadedEntities.length !== ids.length) {
|
|
124
|
-
throw new Error('Invalid entity ids provided for
|
|
131
|
+
throw new Error('Invalid entity ids provided for set');
|
|
125
132
|
}
|
|
126
133
|
|
|
127
134
|
return loadedEntities;
|
|
128
135
|
}
|
|
129
136
|
|
|
130
|
-
private async tranformForCommandLink(ids: any, relatedEntityRepository: any
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
+
private async tranformForCommandLink(ids: any[], relatedEntityRepository: any): Promise<undefined> {
|
|
138
|
+
if (!this.options.isUpdate) {
|
|
139
|
+
throw new Error('Link command is only supported for update operations');
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const count: number = await relatedEntityRepository.count({
|
|
143
|
+
where: { id: In(ids) }
|
|
144
|
+
});
|
|
145
|
+
if (count !== ids.length) {
|
|
137
146
|
throw new Error('Invalid entity ids provided for linking');
|
|
138
147
|
}
|
|
139
|
-
tranformedRelatedFields.push(...loadedEntities);
|
|
140
148
|
|
|
141
|
-
|
|
149
|
+
await this.options.entityManager
|
|
150
|
+
.createQueryBuilder()
|
|
151
|
+
.relation(classify(this.options.modelSingularName), this.valueFieldName)
|
|
152
|
+
.of(this.options.entityId)
|
|
153
|
+
.add(ids);
|
|
154
|
+
|
|
155
|
+
return undefined;
|
|
142
156
|
}
|
|
143
157
|
|
|
144
|
-
private async transformForCommandUnLink(ids: any
|
|
145
|
-
if (
|
|
146
|
-
throw new Error('
|
|
147
|
-
}
|
|
158
|
+
private async transformForCommandUnLink(ids: any[]): Promise<undefined> {
|
|
159
|
+
if (!this.options.isUpdate) {
|
|
160
|
+
throw new Error('Unlink command is only supported for update operations');
|
|
161
|
+
}
|
|
148
162
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
const filteredEntities = entityInstance[this.valueFieldName].filter((entity) => !ids.includes(entity.id));
|
|
155
|
-
tranformedRelatedFields.push(...filteredEntities);
|
|
163
|
+
await this.options.entityManager
|
|
164
|
+
.createQueryBuilder()
|
|
165
|
+
.relation(classify(this.options.modelSingularName), this.valueFieldName)
|
|
166
|
+
.of(this.options.entityId)
|
|
167
|
+
.remove(ids);
|
|
156
168
|
|
|
157
|
-
return
|
|
169
|
+
return undefined;
|
|
158
170
|
}
|
|
159
171
|
|
|
160
172
|
private async transformForCommandCreate(values: any[], relatedEntityRepository: any): Promise<any[]> {
|
|
@@ -24,7 +24,7 @@ export function buildDefaultSecurityHeaderOptions(): Readonly<HelmetOptions> {
|
|
|
24
24
|
|
|
25
25
|
// clickjacking defense (modern)
|
|
26
26
|
"frame-ancestors": ["'none'"],
|
|
27
|
-
|
|
27
|
+
"style-src": ["'self'"],
|
|
28
28
|
// add/adjust as needed for your app:
|
|
29
29
|
// "script-src": ["'self'"], // add hashes/nonces/CSPRO if needed
|
|
30
30
|
// "style-src": ["'self'", "'unsafe-inline'"],
|
package/src/index.ts
CHANGED
|
@@ -212,16 +212,12 @@ export * from './jobs/msg91-whatsapp-subscriber.service'
|
|
|
212
212
|
export * from './listeners/user-registration.listener'
|
|
213
213
|
|
|
214
214
|
export * from './passport-strategies/google-oauth.strategy'
|
|
215
|
-
export * from './passport-strategies/local.strategy'
|
|
216
215
|
|
|
217
216
|
export * from './services/selection-providers/list-of-values-selection-providers.service'
|
|
218
217
|
|
|
219
218
|
// seed-data
|
|
220
|
-
export * from './seeders/email-template-seeder.service'
|
|
221
219
|
export * from './seeders/permission-metadata-seeder.service'
|
|
222
|
-
export * from './seeders/sms-template-seeder.service'
|
|
223
220
|
export * from './seeders/module-metadata-seeder.service'
|
|
224
|
-
export * from './seeders/user-seeder.service'
|
|
225
221
|
|
|
226
222
|
// export * from './services/access-token-storage.service'
|
|
227
223
|
export * from './services/action-metadata.service'
|