@solidstarters/solid-core 1.2.201 → 1.2.203
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/dist/config/cache.options.d.ts +1 -1
- package/dist/config/cache.options.d.ts.map +1 -1
- package/dist/config/cache.options.js +2 -2
- package/dist/config/cache.options.js.map +1 -1
- package/dist/config/iam.config.d.ts +4 -0
- package/dist/config/iam.config.d.ts.map +1 -1
- package/dist/config/iam.config.js +2 -0
- package/dist/config/iam.config.js.map +1 -1
- package/dist/controllers/model-metadata.controller.d.ts +25 -0
- package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/model-metadata.controller.js +23 -0
- package/dist/controllers/model-metadata.controller.js.map +1 -1
- package/dist/controllers/setting.controller.d.ts +1 -2
- package/dist/controllers/setting.controller.d.ts.map +1 -1
- package/dist/controllers/setting.controller.js +21 -42
- package/dist/controllers/setting.controller.js.map +1 -1
- package/dist/decorators/sms-provider.decorator.d.ts +3 -0
- package/dist/decorators/sms-provider.decorator.d.ts.map +1 -0
- package/dist/decorators/sms-provider.decorator.js +11 -0
- package/dist/decorators/sms-provider.decorator.js.map +1 -0
- package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-role-metadata.dto.js +1 -0
- package/dist/dtos/create-role-metadata.dto.js.map +1 -1
- package/dist/dtos/navigation.dto.d.ts +6 -0
- package/dist/dtos/navigation.dto.d.ts.map +1 -0
- package/dist/dtos/navigation.dto.js +33 -0
- package/dist/dtos/navigation.dto.js.map +1 -0
- package/dist/dtos/sign-in.dto.js +3 -3
- package/dist/dtos/sign-in.dto.js.map +1 -1
- package/dist/entities/common.entity.js +5 -4
- package/dist/entities/common.entity.js.map +1 -1
- package/dist/entities/field-metadata.entity.d.ts.map +1 -1
- package/dist/entities/field-metadata.entity.js +2 -1
- package/dist/entities/field-metadata.entity.js.map +1 -1
- package/dist/entities/legacy-common.entity.d.ts.map +1 -1
- package/dist/entities/legacy-common.entity.js +5 -4
- package/dist/entities/legacy-common.entity.js.map +1 -1
- package/dist/entities/model-metadata.entity.d.ts.map +1 -1
- package/dist/entities/model-metadata.entity.js +5 -1
- package/dist/entities/model-metadata.entity.js.map +1 -1
- package/dist/factories/mail.factory.d.ts.map +1 -1
- package/dist/factories/mail.factory.js.map +1 -1
- package/dist/factories/sms.factory.d.ts +14 -0
- package/dist/factories/sms.factory.d.ts.map +1 -0
- package/dist/factories/sms.factory.js +53 -0
- package/dist/factories/sms.factory.js.map +1 -0
- package/dist/helpers/date.helper.d.ts.map +1 -1
- package/dist/helpers/date.helper.js +13 -4
- package/dist/helpers/date.helper.js.map +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts +3 -0
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +99 -0
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
- package/dist/helpers/image-encoding.helper.d.ts +10 -0
- package/dist/helpers/image-encoding.helper.d.ts.map +1 -0
- package/dist/helpers/image-encoding.helper.js +44 -0
- package/dist/helpers/image-encoding.helper.js.map +1 -0
- package/dist/helpers/module.helper.d.ts.map +1 -1
- package/dist/helpers/module.helper.js +2 -0
- package/dist/helpers/module.helper.js.map +1 -1
- package/dist/helpers/solid-microservice-adapter.service.d.ts +31 -0
- package/dist/helpers/solid-microservice-adapter.service.d.ts.map +1 -0
- package/dist/helpers/solid-microservice-adapter.service.js +53 -0
- package/dist/helpers/solid-microservice-adapter.service.js.map +1 -0
- package/dist/helpers/solid-registry.d.ts +3 -0
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +7 -0
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/index.d.ts +11 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -6
- package/dist/index.js.map +1 -1
- package/dist/jobs/database/{sms-publisher-database.service.d.ts → msg91-sms-publisher-database.service.d.ts} +2 -2
- package/dist/jobs/database/msg91-sms-publisher-database.service.d.ts.map +1 -0
- package/dist/jobs/database/{sms-publisher-database.service.js → msg91-sms-publisher-database.service.js} +8 -8
- package/dist/jobs/database/msg91-sms-publisher-database.service.js.map +1 -0
- package/dist/jobs/database/{sms-queue-database-options.d.ts → msg91-sms-queue-database-options.d.ts} +1 -1
- package/dist/jobs/database/msg91-sms-queue-database-options.d.ts.map +1 -0
- package/dist/jobs/database/{sms-queue-database-options.js → msg91-sms-queue-database-options.js} +1 -1
- package/dist/jobs/database/msg91-sms-queue-database-options.js.map +1 -0
- package/dist/jobs/database/{sms-subscriber-database.service.d.ts → msg91-sms-subscriber-database.service.d.ts} +5 -5
- package/dist/jobs/database/msg91-sms-subscriber-database.service.d.ts.map +1 -0
- package/dist/jobs/database/{sms-subscriber-database.service.js → msg91-sms-subscriber-database.service.js} +14 -12
- package/dist/jobs/database/msg91-sms-subscriber-database.service.js.map +1 -0
- package/dist/jobs/database/otp-subscriber-database.service.d.ts +4 -4
- package/dist/jobs/database/otp-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/otp-subscriber-database.service.js +6 -4
- package/dist/jobs/database/otp-subscriber-database.service.js.map +1 -1
- package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts +3 -3
- package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/twilio-sms-subscriber-database.service.js +6 -4
- package/dist/jobs/database/twilio-sms-subscriber-database.service.js.map +1 -1
- package/dist/jobs/{sms-publisher.service.d.ts → msg91-otp-publisher.service.d.ts} +2 -2
- package/dist/jobs/msg91-otp-publisher.service.d.ts.map +1 -0
- package/dist/jobs/{sms-publisher.service.js → msg91-otp-publisher.service.js} +8 -8
- package/dist/jobs/msg91-otp-publisher.service.js.map +1 -0
- package/dist/jobs/{sms-queue-options.d.ts → msg91-otp-queue-options.d.ts} +1 -1
- package/dist/jobs/msg91-otp-queue-options.d.ts.map +1 -0
- package/dist/jobs/{otp-queue-options.js → msg91-otp-queue-options.js} +1 -1
- package/dist/jobs/msg91-otp-queue-options.js.map +1 -0
- package/dist/jobs/{sms-subscriber.service.d.ts → msg91-otp-subscriber.service.d.ts} +6 -6
- package/dist/jobs/msg91-otp-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/{otp-subscriber.service.js → msg91-otp-subscriber.service.js} +14 -12
- package/dist/jobs/msg91-otp-subscriber.service.js.map +1 -0
- package/dist/jobs/{otp-publisher.service.d.ts → msg91-sms-publisher.service.d.ts} +2 -2
- package/dist/jobs/msg91-sms-publisher.service.d.ts.map +1 -0
- package/dist/jobs/{otp-publisher.service.js → msg91-sms-publisher.service.js} +8 -8
- package/dist/jobs/msg91-sms-publisher.service.js.map +1 -0
- package/dist/jobs/{otp-queue-options.d.ts → msg91-sms-queue-options.d.ts} +1 -1
- package/dist/jobs/msg91-sms-queue-options.d.ts.map +1 -0
- package/dist/jobs/{sms-queue-options.js → msg91-sms-queue-options.js} +1 -1
- package/dist/jobs/msg91-sms-queue-options.js.map +1 -0
- package/dist/jobs/{otp-subscriber.service.d.ts → msg91-sms-subscriber.service.d.ts} +7 -7
- package/dist/jobs/msg91-sms-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/{sms-subscriber.service.js → msg91-sms-subscriber.service.js} +14 -12
- package/dist/jobs/msg91-sms-subscriber.service.js.map +1 -0
- package/dist/jobs/twilio-sms-subscriber.service.d.ts +3 -3
- package/dist/jobs/twilio-sms-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/twilio-sms-subscriber.service.js +6 -4
- package/dist/jobs/twilio-sms-subscriber.service.js.map +1 -1
- package/dist/mappers/list-of-values-mapper.d.ts.map +1 -1
- package/dist/mappers/list-of-values-mapper.js +1 -1
- package/dist/mappers/list-of-values-mapper.js.map +1 -1
- package/dist/repository/security-rule.repository.d.ts.map +1 -1
- package/dist/repository/security-rule.repository.js +7 -2
- package/dist/repository/security-rule.repository.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +24 -2
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +71 -25
- package/dist/seeders/user-seeder.service.d.ts.map +1 -1
- package/dist/seeders/user-seeder.service.js +5 -4
- package/dist/seeders/user-seeder.service.js.map +1 -1
- package/dist/services/authentication.service.d.ts +6 -3
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +53 -18
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.d.ts.map +1 -1
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js.map +1 -1
- package/dist/services/crud.service.d.ts +1 -2
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +6 -1
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/excel.service.d.ts +1 -0
- package/dist/services/excel.service.d.ts.map +1 -1
- package/dist/services/excel.service.js +4 -0
- package/dist/services/excel.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +28 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +109 -2
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +3 -45
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/sms/Msg91BaseSMSService.js +6 -6
- package/dist/services/sms/Msg91BaseSMSService.js.map +1 -1
- package/dist/services/sms/Msg91OTPService.d.ts.map +1 -1
- package/dist/services/sms/Msg91OTPService.js +3 -1
- package/dist/services/sms/Msg91OTPService.js.map +1 -1
- package/dist/services/sms/Msg91SMSService.d.ts.map +1 -1
- package/dist/services/sms/Msg91SMSService.js +3 -1
- package/dist/services/sms/Msg91SMSService.js.map +1 -1
- package/dist/services/sms/TwilioSMSService.d.ts.map +1 -1
- package/dist/services/sms/TwilioSMSService.js +2 -0
- package/dist/services/sms/TwilioSMSService.js.map +1 -1
- package/dist/services/solid-introspect.service.d.ts +1 -0
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +14 -0
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/services/user.service.d.ts +8 -1
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +15 -4
- package/dist/services/user.service.js.map +1 -1
- package/dist/solid-core-cli.module.js +1 -1
- package/dist/solid-core-cli.module.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +29 -13
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/scheduled-job.subscriber.d.ts.map +1 -1
- package/dist/subscribers/scheduled-job.subscriber.js +1 -1
- package/dist/subscribers/scheduled-job.subscriber.js.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts +2 -2
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.js +28 -6
- package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/config/cache.options.ts +6 -3
- package/src/config/iam.config.ts +2 -1
- package/src/controllers/model-metadata.controller.ts +21 -1
- package/src/controllers/setting.controller.ts +32 -36
- package/src/decorators/sms-provider.decorator.ts +7 -0
- package/src/dtos/create-role-metadata.dto.ts +3 -0
- package/src/dtos/navigation.dto.ts +14 -0
- package/src/dtos/sign-in.dto.ts +3 -3
- package/src/entities/common.entity.ts +7 -7
- package/src/entities/field-metadata.entity.ts +1 -1
- package/src/entities/legacy-common.entity.ts +6 -5
- package/src/entities/model-metadata.entity.ts +1 -1
- package/src/factories/mail.factory.ts +0 -1
- package/src/factories/sms.factory.ts +43 -0
- package/src/helpers/date.helper.ts +38 -9
- package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +138 -4
- package/src/helpers/image-encoding.helper.ts +71 -0
- package/src/helpers/module.helper.ts +3 -0
- package/src/helpers/solid-microservice-adapter.service.ts +68 -0
- package/src/helpers/solid-registry.ts +9 -0
- package/src/index.ts +11 -6
- package/src/jobs/database/{sms-publisher-database.service.ts → msg91-sms-publisher-database.service.ts} +2 -2
- package/src/jobs/database/{sms-subscriber-database.service.ts → msg91-sms-subscriber-database.service.ts} +9 -4
- package/src/jobs/database/otp-subscriber-database.service.ts +8 -2
- package/src/jobs/database/twilio-sms-subscriber-database.service.ts +5 -2
- package/src/jobs/{otp-publisher.service.ts → msg91-otp-publisher.service.ts} +2 -2
- package/src/jobs/{otp-subscriber.service.ts → msg91-otp-subscriber.service.ts} +10 -4
- package/src/jobs/{sms-publisher.service.ts → msg91-sms-publisher.service.ts} +2 -2
- package/src/jobs/{sms-subscriber.service.ts → msg91-sms-subscriber.service.ts} +9 -4
- package/src/jobs/twilio-sms-subscriber.service.ts +6 -2
- package/src/mappers/list-of-values-mapper.ts +2 -1
- package/src/repository/security-rule.repository.ts +7 -2
- package/src/seeders/module-metadata-seeder.service.ts +33 -6
- package/src/seeders/seed-data/email-templates/email-on-signup.handlebars.html +155 -0
- package/src/seeders/seed-data/sms-templates/text-on-signup.handlebars.txt +10 -0
- package/src/seeders/seed-data/solid-core-metadata.json +72 -26
- package/src/seeders/user-seeder.service.ts +5 -4
- package/src/services/1.js +6 -0
- package/src/services/authentication.service.ts +80 -15
- package/src/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.ts +1 -2
- package/src/services/crud.service.ts +23 -19
- package/src/services/excel.service.ts +6 -0
- package/src/services/model-metadata.service.ts +151 -0
- package/src/services/setting.service.ts +12 -52
- package/src/services/sms/Msg91BaseSMSService.ts +6 -6
- package/src/services/sms/Msg91OTPService.ts +3 -2
- package/src/services/sms/Msg91SMSService.ts +3 -1
- package/src/services/sms/TwilioSMSService.ts +3 -3
- package/src/services/solid-introspect.service.ts +22 -0
- package/src/services/user.service.ts +19 -0
- package/src/solid-core-cli.module.ts +2 -2
- package/src/solid-core.module.ts +33 -13
- package/src/subscribers/scheduled-job.subscriber.ts +9 -2
- package/src/transformers/typeorm/local-date-time-transformer.ts +38 -13
- package/dist/jobs/database/sms-publisher-database.service.d.ts.map +0 -1
- package/dist/jobs/database/sms-publisher-database.service.js.map +0 -1
- package/dist/jobs/database/sms-queue-database-options.d.ts.map +0 -1
- package/dist/jobs/database/sms-queue-database-options.js.map +0 -1
- package/dist/jobs/database/sms-subscriber-database.service.d.ts.map +0 -1
- package/dist/jobs/database/sms-subscriber-database.service.js.map +0 -1
- package/dist/jobs/otp-publisher.service.d.ts.map +0 -1
- package/dist/jobs/otp-publisher.service.js.map +0 -1
- package/dist/jobs/otp-queue-options.d.ts.map +0 -1
- package/dist/jobs/otp-queue-options.js.map +0 -1
- package/dist/jobs/otp-subscriber.service.d.ts.map +0 -1
- package/dist/jobs/otp-subscriber.service.js.map +0 -1
- package/dist/jobs/sms-publisher.service.d.ts.map +0 -1
- package/dist/jobs/sms-publisher.service.js.map +0 -1
- package/dist/jobs/sms-queue-options.d.ts.map +0 -1
- package/dist/jobs/sms-queue-options.js.map +0 -1
- package/dist/jobs/sms-subscriber.service.d.ts.map +0 -1
- package/dist/jobs/sms-subscriber.service.js.map +0 -1
- /package/src/jobs/database/{sms-queue-database-options.ts → msg91-sms-queue-database-options.ts} +0 -0
- /package/src/jobs/{otp-queue-options.ts → msg91-otp-queue-options.ts} +0 -0
- /package/src/jobs/{sms-queue-options.ts → msg91-sms-queue-options.ts} +0 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Injectable, Logger } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
export interface ImageToBase64Result {
|
|
4
|
+
base64: string;
|
|
5
|
+
mediaType: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
@Injectable()
|
|
9
|
+
export class ImageEncodingService {
|
|
10
|
+
private readonly logger = new Logger(ImageEncodingService.name);
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Fetch an image from a URL and return its Base64 representation.
|
|
14
|
+
*
|
|
15
|
+
* @param url - Public or signed image URL
|
|
16
|
+
* @param mimeTypeOverride - Optional MIME type (image/png, image/jpeg)
|
|
17
|
+
* @param maxSizeBytes - Optional max size guard (default 5MB)
|
|
18
|
+
*/
|
|
19
|
+
async imageUrlToBase64(
|
|
20
|
+
url: string,
|
|
21
|
+
mimeTypeOverride?: string,
|
|
22
|
+
maxSizeBytes = 5 * 1024 * 1024,
|
|
23
|
+
): Promise<ImageToBase64Result> {
|
|
24
|
+
this.logger.debug(`Fetching image from URL: ${url}`);
|
|
25
|
+
|
|
26
|
+
const response = await fetch(url);
|
|
27
|
+
|
|
28
|
+
if (!response.ok) {
|
|
29
|
+
throw new Error(
|
|
30
|
+
`Failed to fetch image (${response.status} ${response.statusText})`,
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const contentType =
|
|
35
|
+
mimeTypeOverride ||
|
|
36
|
+
response.headers.get('content-type') ||
|
|
37
|
+
'image/jpeg';
|
|
38
|
+
|
|
39
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
40
|
+
const buffer = Buffer.from(arrayBuffer);
|
|
41
|
+
|
|
42
|
+
if (buffer.length > maxSizeBytes) {
|
|
43
|
+
throw new Error(
|
|
44
|
+
`Image size ${buffer.length} bytes exceeds limit of ${maxSizeBytes} bytes`,
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
base64: buffer.toString('base64'),
|
|
50
|
+
mediaType: contentType,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Convenience method that returns a data URL
|
|
56
|
+
* (useful for OpenAI Responses API).
|
|
57
|
+
*/
|
|
58
|
+
async imageUrlToDataUrl(
|
|
59
|
+
url: string,
|
|
60
|
+
mimeTypeOverride?: string,
|
|
61
|
+
maxSizeBytes?: number,
|
|
62
|
+
): Promise<string> {
|
|
63
|
+
const { base64, mediaType } = await this.imageUrlToBase64(
|
|
64
|
+
url,
|
|
65
|
+
mimeTypeOverride,
|
|
66
|
+
maxSizeBytes,
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
return `data:${mediaType};base64,${base64}`;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -32,6 +32,8 @@ export const getDynamicModuleNames = (): string[] => {
|
|
|
32
32
|
.map(dirent => dirent.name);
|
|
33
33
|
|
|
34
34
|
// logger.debug(`Enabled dynamic modules:`, enabledModules);
|
|
35
|
+
console.log(`Dynamic Modules Are:`, enabledModules);
|
|
36
|
+
|
|
35
37
|
return enabledModules;
|
|
36
38
|
}
|
|
37
39
|
|
|
@@ -65,6 +67,7 @@ export const getDynamicModuleNamesBasedOnMetadata = (): string[] => {
|
|
|
65
67
|
.map(dirent => dirent.name);
|
|
66
68
|
|
|
67
69
|
// logger.debug(`Enabled dynamic modules basis src:`, enabledModules);
|
|
70
|
+
console.log(`Src Based Dynamic Modules Are:`, enabledModules);
|
|
68
71
|
return enabledModules;
|
|
69
72
|
}
|
|
70
73
|
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Injectable, Logger, Scope } from '@nestjs/common';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
|
|
4
|
+
export interface SolidxIamAuthRequest {
|
|
5
|
+
email?: string;
|
|
6
|
+
username?: string;
|
|
7
|
+
password: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface SolidxIamUser {
|
|
11
|
+
email: string;
|
|
12
|
+
mobile: string;
|
|
13
|
+
username: string;
|
|
14
|
+
forcePasswordChange: boolean;
|
|
15
|
+
id: number;
|
|
16
|
+
roles: string[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface SolidxIamAuthData {
|
|
20
|
+
user: SolidxIamUser;
|
|
21
|
+
accessToken: string;
|
|
22
|
+
refreshToken: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface SolidxIamAuthResponse {
|
|
26
|
+
statusCode: number;
|
|
27
|
+
message: string[];
|
|
28
|
+
error: string;
|
|
29
|
+
data: SolidxIamAuthData;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@Injectable({ scope: Scope.TRANSIENT })
|
|
33
|
+
export class SolidMicroserviceAdapter {
|
|
34
|
+
private readonly logger = new Logger(SolidMicroserviceAdapter.name);
|
|
35
|
+
private baseUrl?: string;
|
|
36
|
+
|
|
37
|
+
setBaseUrl(baseUrl: string): this {
|
|
38
|
+
this.baseUrl = baseUrl;
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
async authenticate({ email, username, password }: SolidxIamAuthRequest): Promise<SolidxIamAuthResponse> {
|
|
43
|
+
if (!password) {
|
|
44
|
+
throw new Error('password is required for IAM authentication');
|
|
45
|
+
}
|
|
46
|
+
if (!email && !username) {
|
|
47
|
+
throw new Error('email or username is required for IAM authentication');
|
|
48
|
+
}
|
|
49
|
+
if (!this.baseUrl) {
|
|
50
|
+
throw new Error('baseUrl must be set before IAM authentication');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const payload: SolidxIamAuthRequest = { password };
|
|
54
|
+
if (email) payload.email = email;
|
|
55
|
+
if (username) payload.username = username;
|
|
56
|
+
|
|
57
|
+
this.logger.debug(`Requesting IAM access token from ${this.baseUrl}/api/iam/authenticate`);
|
|
58
|
+
|
|
59
|
+
const response = await axios.post(`${this.baseUrl}/api/iam/authenticate`, payload, {
|
|
60
|
+
timeout: 10000,
|
|
61
|
+
headers: {
|
|
62
|
+
'Content-Type': 'application/json',
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
return response.data as SolidxIamAuthResponse;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -81,6 +81,7 @@ export class SolidRegistry {
|
|
|
81
81
|
private dashboardQuestionDataProviders: Set<InstanceWrapper> = new Set();
|
|
82
82
|
private mailProviders: Set<InstanceWrapper> = new Set();
|
|
83
83
|
private whatsappProviders: Set<InstanceWrapper> = new Set();
|
|
84
|
+
private smsProviders: Set<InstanceWrapper> = new Set();
|
|
84
85
|
private securityRuleConfigProviders: Set<InstanceWrapper> = new Set();
|
|
85
86
|
private errorCodeProviders: Set<InstanceWrapper> = new Set();
|
|
86
87
|
|
|
@@ -92,6 +93,10 @@ export class SolidRegistry {
|
|
|
92
93
|
this.whatsappProviders.add(whatsappProvider);
|
|
93
94
|
}
|
|
94
95
|
|
|
96
|
+
registerSmsProvider(smsProvider: InstanceWrapper): void {
|
|
97
|
+
this.smsProviders.add(smsProvider);
|
|
98
|
+
}
|
|
99
|
+
|
|
95
100
|
registerSecurityRuleConfigProvider(securityRuleConfigProvider: InstanceWrapper): void {
|
|
96
101
|
this.securityRuleConfigProviders.add(securityRuleConfigProvider);
|
|
97
102
|
}
|
|
@@ -148,6 +153,10 @@ export class SolidRegistry {
|
|
|
148
153
|
return Array.from(this.whatsappProviders);
|
|
149
154
|
}
|
|
150
155
|
|
|
156
|
+
getSmsProviders(): Array<InstanceWrapper> {
|
|
157
|
+
return Array.from(this.smsProviders);
|
|
158
|
+
}
|
|
159
|
+
|
|
151
160
|
getSecurityRuleConfigProviders(): Array<InstanceWrapper> {
|
|
152
161
|
return Array.from(this.securityRuleConfigProviders);
|
|
153
162
|
}
|
package/src/index.ts
CHANGED
|
@@ -24,6 +24,7 @@ export * from './decorators/solid-database-module.decorator'
|
|
|
24
24
|
export * from './decorators/solid-service.decorator'
|
|
25
25
|
export * from './decorators/mail-provider.decorator'
|
|
26
26
|
export * from './decorators/security-rule-config-provider.decorator'
|
|
27
|
+
export * from './decorators/sms-provider.decorator'
|
|
27
28
|
|
|
28
29
|
export * from './dtos/post-chatter-message.dto'
|
|
29
30
|
export * from './dtos/security-rule-config.dto'
|
|
@@ -177,6 +178,8 @@ export * from './helpers/environment.helper'
|
|
|
177
178
|
export * from './helpers/cors.helper'
|
|
178
179
|
export * from './helpers/security.helper'
|
|
179
180
|
export * from './helpers/model-metadata-helper.service'
|
|
181
|
+
export * from './helpers/image-encoding.helper'
|
|
182
|
+
export * from './helpers/solid-microservice-adapter.service'
|
|
180
183
|
|
|
181
184
|
export * from './services/crud.service'
|
|
182
185
|
export * from './interceptors/logging.interceptor'
|
|
@@ -194,12 +197,12 @@ export * from './jobs/api-email-subscriber.service'
|
|
|
194
197
|
export { SmtpEmailQueuePublisherRabbitmq, SmtpEmailQueuePublisherRabbitmq as EmailQueuePublisher } from './jobs/smtp-email-publisher.service' // alias for backward compatibility
|
|
195
198
|
export * from './jobs/smtp-email-queue-options'
|
|
196
199
|
export { SmtpEmailQueueSubscriberRabbitmq, SmtpEmailQueueSubscriberRabbitmq as EmailQueueSubscriber } from './jobs/smtp-email-subscriber.service' // alias for backward compatibility
|
|
197
|
-
export * from './jobs/otp-publisher.service'
|
|
198
|
-
export * from './jobs/otp-queue-options'
|
|
199
|
-
export * from './jobs/otp-subscriber.service'
|
|
200
|
-
export * from './jobs/sms-publisher.service'
|
|
201
|
-
export * from './jobs/sms-queue-options'
|
|
202
|
-
export * from './jobs/sms-subscriber.service'
|
|
200
|
+
export * from './jobs/msg91-otp-publisher.service'
|
|
201
|
+
export * from './jobs/msg91-otp-queue-options'
|
|
202
|
+
export * from './jobs/msg91-otp-subscriber.service'
|
|
203
|
+
export * from './jobs/msg91-sms-publisher.service'
|
|
204
|
+
export * from './jobs/msg91-sms-queue-options'
|
|
205
|
+
export * from './jobs/msg91-sms-subscriber.service'
|
|
203
206
|
export * from './jobs/msg91-whatsapp-publisher.service'
|
|
204
207
|
export * from './jobs/msg91-whatsapp-queue-options'
|
|
205
208
|
export * from './jobs/msg91-whatsapp-subscriber.service'
|
|
@@ -281,6 +284,8 @@ export * from './services/ai-interaction.service'
|
|
|
281
284
|
|
|
282
285
|
// Factories
|
|
283
286
|
export * from './factories/mail.factory'
|
|
287
|
+
export * from './factories/sms.factory'
|
|
288
|
+
export * from './factories/whatsapp.factory'
|
|
284
289
|
|
|
285
290
|
// Repositories
|
|
286
291
|
export * from './repository/solid-base.repository'
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common';
|
|
2
2
|
|
|
3
|
-
import smsQueueOptions from './sms-queue-database-options';
|
|
3
|
+
import smsQueueOptions from './msg91-sms-queue-database-options';
|
|
4
4
|
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
5
5
|
import { MqMessageService } from 'src/services/mq-message.service';
|
|
6
6
|
import { QueuesModuleOptions } from 'src/interfaces';
|
|
7
7
|
import { DatabasePublisher } from 'src/services/queues/database-publisher.service';
|
|
8
8
|
|
|
9
9
|
@Injectable()
|
|
10
|
-
export class
|
|
10
|
+
export class Msg91SmsQueuePublisherDatabase extends DatabasePublisher<any> {
|
|
11
11
|
constructor(
|
|
12
12
|
protected readonly mqMessageService: MqMessageService,
|
|
13
13
|
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common';
|
|
2
2
|
|
|
3
3
|
import { QueueMessage } from 'src/interfaces/mq';
|
|
4
|
-
import smsQueueOptions from './sms-queue-database-options';
|
|
4
|
+
import smsQueueOptions from './msg91-sms-queue-database-options';
|
|
5
5
|
import { MqMessageService } from 'src/services/mq-message.service';
|
|
6
6
|
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
7
7
|
import { Msg91SMSService } from 'src/services/sms/Msg91SMSService';
|
|
8
8
|
import { QueuesModuleOptions } from 'src/interfaces';
|
|
9
9
|
import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
|
|
10
10
|
import { PollerService } from 'src/services/poller.service';
|
|
11
|
+
import { SmsFactory } from 'src/factories/sms.factory';
|
|
11
12
|
|
|
12
13
|
@Injectable()
|
|
13
|
-
export class
|
|
14
|
+
export class Msg91SmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
|
|
14
15
|
constructor(
|
|
15
|
-
private readonly smsService: Msg91SMSService,
|
|
16
|
+
// private readonly smsService: Msg91SMSService,
|
|
17
|
+
private readonly smsFactory: SmsFactory,
|
|
16
18
|
readonly mqMessageService: MqMessageService,
|
|
17
19
|
readonly mqMessageQueueService: MqMessageQueueService,
|
|
18
20
|
readonly poller: PollerService,
|
|
@@ -27,6 +29,9 @@ export class SmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
|
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
subscribe(message: QueueMessage<any>) {
|
|
30
|
-
|
|
32
|
+
const smsService: Msg91SMSService = this.smsFactory.getSmsService(Msg91SMSService.name) as Msg91SMSService;
|
|
33
|
+
return smsService.sendSMSSynchronously(message);
|
|
34
|
+
|
|
35
|
+
// return this.smsService.sendSMSSynchronously(message);
|
|
31
36
|
}
|
|
32
37
|
}
|
|
@@ -8,11 +8,14 @@ import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.serv
|
|
|
8
8
|
import { Msg91OTPService } from 'src/services/sms/Msg91OTPService';
|
|
9
9
|
import { QueuesModuleOptions } from 'src/interfaces';
|
|
10
10
|
import { PollerService } from 'src/services/poller.service';
|
|
11
|
+
import { SmsFactory } from 'src/factories/sms.factory';
|
|
11
12
|
|
|
12
13
|
@Injectable()
|
|
13
14
|
export class OTPQueueSubscriberDatabase extends DatabaseSubscriber<any> {
|
|
14
15
|
constructor(
|
|
15
|
-
private readonly otpService: Msg91OTPService,
|
|
16
|
+
// private readonly otpService: Msg91OTPService,
|
|
17
|
+
private readonly smsFactory: SmsFactory,
|
|
18
|
+
|
|
16
19
|
readonly mqMessageService: MqMessageService,
|
|
17
20
|
readonly poller: PollerService,
|
|
18
21
|
readonly mqMessageQueueService: MqMessageQueueService,
|
|
@@ -27,6 +30,9 @@ export class OTPQueueSubscriberDatabase extends DatabaseSubscriber<any> {
|
|
|
27
30
|
}
|
|
28
31
|
|
|
29
32
|
subscribe(message: QueueMessage<any>) {
|
|
30
|
-
this.
|
|
33
|
+
const otpService: Msg91OTPService = this.smsFactory.getSmsService(Msg91OTPService.name) as Msg91OTPService;
|
|
34
|
+
return otpService.sendSMSSynchronously(message);
|
|
35
|
+
|
|
36
|
+
// this.otpService.sendSMSSynchronously(message);
|
|
31
37
|
}
|
|
32
38
|
}
|
|
@@ -8,11 +8,13 @@ import { QueuesModuleOptions } from 'src/interfaces';
|
|
|
8
8
|
import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
|
|
9
9
|
import { TwilioSMSService } from 'src/services/sms/TwilioSMSService';
|
|
10
10
|
import { PollerService } from 'src/services/poller.service';
|
|
11
|
+
import { SmsFactory } from 'src/factories/sms.factory';
|
|
11
12
|
|
|
12
13
|
@Injectable()
|
|
13
14
|
export class TwilioSmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
|
|
14
15
|
constructor(
|
|
15
|
-
private readonly smsService: TwilioSMSService,
|
|
16
|
+
// private readonly smsService: TwilioSMSService,
|
|
17
|
+
private readonly smsFactory: SmsFactory,
|
|
16
18
|
readonly mqMessageService: MqMessageService,
|
|
17
19
|
readonly mqMessageQueueService: MqMessageQueueService,
|
|
18
20
|
readonly poller: PollerService,
|
|
@@ -27,6 +29,7 @@ export class TwilioSmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
|
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
subscribe(message: QueueMessage<any>) {
|
|
30
|
-
|
|
32
|
+
const smsService: TwilioSMSService = this.smsFactory.getSmsService(TwilioSMSService.name) as TwilioSMSService;
|
|
33
|
+
return smsService.sendSMSSynchronously(message);
|
|
31
34
|
}
|
|
32
35
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common';
|
|
2
2
|
|
|
3
3
|
import { RabbitMqPublisher } from 'src/services/queues/rabbitmq-publisher.service';
|
|
4
|
-
import otpQueueOptions from './otp-queue-options';
|
|
4
|
+
import otpQueueOptions from './msg91-otp-queue-options';
|
|
5
5
|
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
6
6
|
import { MqMessageService } from 'src/services/mq-message.service';
|
|
7
7
|
import { QueuesModuleOptions } from "../interfaces";
|
|
8
8
|
|
|
9
9
|
@Injectable()
|
|
10
|
-
export class
|
|
10
|
+
export class Msg91OTPQueuePublisher extends RabbitMqPublisher<any> {
|
|
11
11
|
constructor(
|
|
12
12
|
protected readonly mqMessageService: MqMessageService,
|
|
13
13
|
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
@@ -3,15 +3,18 @@ import { Injectable } from '@nestjs/common';
|
|
|
3
3
|
import { QueueMessage } from 'src/interfaces/mq';
|
|
4
4
|
import { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';
|
|
5
5
|
import { Msg91OTPService } from '../services/sms/Msg91OTPService';
|
|
6
|
-
import otpQueueOptions from './otp-queue-options';
|
|
6
|
+
import otpQueueOptions from './msg91-otp-queue-options';
|
|
7
7
|
import { MqMessageService } from 'src/services/mq-message.service';
|
|
8
8
|
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
9
9
|
import { QueuesModuleOptions } from "../interfaces";
|
|
10
|
+
import { SmsFactory } from 'src/factories/sms.factory';
|
|
10
11
|
|
|
11
12
|
@Injectable()
|
|
12
|
-
export class
|
|
13
|
+
export class Msg91OTPQueueSubscriber extends RabbitMqSubscriber<any> {
|
|
13
14
|
constructor(
|
|
14
|
-
private readonly otpService: Msg91OTPService,
|
|
15
|
+
// private readonly otpService: Msg91OTPService,
|
|
16
|
+
private readonly smsFactory: SmsFactory,
|
|
17
|
+
|
|
15
18
|
readonly mqMessageService: MqMessageService,
|
|
16
19
|
readonly mqMessageQueueService: MqMessageQueueService,
|
|
17
20
|
) {
|
|
@@ -25,6 +28,9 @@ export class OTPQueueSubscriber extends RabbitMqSubscriber<any> {
|
|
|
25
28
|
}
|
|
26
29
|
|
|
27
30
|
subscribe(message: QueueMessage<any>) {
|
|
28
|
-
this.
|
|
31
|
+
const otpService: Msg91OTPService = this.smsFactory.getSmsService(Msg91OTPService.name) as Msg91OTPService;
|
|
32
|
+
return otpService.sendSMSSynchronously(message);
|
|
33
|
+
|
|
34
|
+
// this.otpService.sendSMSSynchronously(message);
|
|
29
35
|
}
|
|
30
36
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common';
|
|
2
2
|
|
|
3
3
|
import { RabbitMqPublisher } from 'src/services/queues/rabbitmq-publisher.service';
|
|
4
|
-
import smsQueueOptions from './sms-queue-options';
|
|
4
|
+
import smsQueueOptions from './msg91-sms-queue-options';
|
|
5
5
|
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
6
6
|
import { MqMessageService } from 'src/services/mq-message.service';
|
|
7
7
|
import { QueuesModuleOptions } from "../interfaces";
|
|
8
8
|
|
|
9
9
|
@Injectable()
|
|
10
|
-
export class
|
|
10
|
+
export class Msg91SmsQueuePublisher extends RabbitMqPublisher<any> {
|
|
11
11
|
constructor(
|
|
12
12
|
protected readonly mqMessageService: MqMessageService,
|
|
13
13
|
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
@@ -2,16 +2,18 @@ import { Injectable } from '@nestjs/common';
|
|
|
2
2
|
|
|
3
3
|
import { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';
|
|
4
4
|
import { QueueMessage } from 'src/interfaces/mq';
|
|
5
|
-
import smsQueueOptions from './sms-queue-options';
|
|
5
|
+
import smsQueueOptions from './msg91-sms-queue-options';
|
|
6
6
|
import { Msg91SMSService } from '../services/sms/Msg91SMSService';
|
|
7
7
|
import { MqMessageService } from 'src/services/mq-message.service';
|
|
8
8
|
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
9
9
|
import { QueuesModuleOptions } from "../interfaces";
|
|
10
|
+
import { SmsFactory } from 'src/factories/sms.factory';
|
|
10
11
|
|
|
11
12
|
@Injectable()
|
|
12
|
-
export class
|
|
13
|
+
export class Msg91SmsQueueSubscriber extends RabbitMqSubscriber<any> {
|
|
13
14
|
constructor(
|
|
14
|
-
private readonly smsService: Msg91SMSService,
|
|
15
|
+
// private readonly smsService: Msg91SMSService,
|
|
16
|
+
private readonly smsFactory: SmsFactory,
|
|
15
17
|
readonly mqMessageService: MqMessageService,
|
|
16
18
|
readonly mqMessageQueueService: MqMessageQueueService,
|
|
17
19
|
) {
|
|
@@ -25,6 +27,9 @@ export class SmsQueueSubscriber extends RabbitMqSubscriber<any> {
|
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
subscribe(message: QueueMessage<any>) {
|
|
28
|
-
|
|
30
|
+
const smsService: Msg91SMSService = this.smsFactory.getSmsService(Msg91SMSService.name) as Msg91SMSService;
|
|
31
|
+
return smsService.sendSMSSynchronously(message);
|
|
32
|
+
|
|
33
|
+
// return this.smsService.sendSMSSynchronously(message);
|
|
29
34
|
}
|
|
30
35
|
}
|
|
@@ -8,11 +8,13 @@ import { PollerService } from 'src/services/poller.service';
|
|
|
8
8
|
import { TwilioSMSService } from 'src/services/sms/TwilioSMSService';
|
|
9
9
|
import smsQueueOptions from './twilio-sms-queue-options';
|
|
10
10
|
import { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';
|
|
11
|
+
import { SmsFactory } from 'src/factories/sms.factory';
|
|
11
12
|
|
|
12
13
|
@Injectable()
|
|
13
14
|
export class TwilioSmsQueueSubscriberRabbitmq extends RabbitMqSubscriber<any> {
|
|
14
15
|
constructor(
|
|
15
|
-
private readonly smsService: TwilioSMSService,
|
|
16
|
+
// private readonly smsService: TwilioSMSService,
|
|
17
|
+
private readonly smsFactory: SmsFactory,
|
|
16
18
|
readonly mqMessageService: MqMessageService,
|
|
17
19
|
readonly mqMessageQueueService: MqMessageQueueService,
|
|
18
20
|
readonly poller: PollerService,
|
|
@@ -27,6 +29,8 @@ export class TwilioSmsQueueSubscriberRabbitmq extends RabbitMqSubscriber<any> {
|
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
subscribe(message: QueueMessage<any>) {
|
|
30
|
-
|
|
32
|
+
const smsService: TwilioSMSService = this.smsFactory.getSmsService(TwilioSMSService.name) as TwilioSMSService;
|
|
33
|
+
return smsService.sendSMSSynchronously(message);
|
|
34
|
+
// return this.smsService.sendSMSSynchronously(message);
|
|
31
35
|
}
|
|
32
36
|
}
|
|
@@ -11,7 +11,8 @@ export class ListOfValuesMapper {
|
|
|
11
11
|
description: listOfValue.description,
|
|
12
12
|
default: listOfValue.default,
|
|
13
13
|
sequence: listOfValue.sequence,
|
|
14
|
-
module: listOfValue.module ? listOfValue.module.id : null
|
|
14
|
+
// module: listOfValue.module ? listOfValue.module.id : null
|
|
15
|
+
moduleUserKey: listOfValue.module ? listOfValue.module.name : null
|
|
15
16
|
};
|
|
16
17
|
}
|
|
17
18
|
}
|
|
@@ -43,6 +43,9 @@ export class SecurityRuleRepository extends SolidBaseRepository<SecurityRule> {
|
|
|
43
43
|
if (rule.securityRuleConfigProvider) {
|
|
44
44
|
// TODO: Evaluation of the securityRuleConfig Provider should happen outside first...
|
|
45
45
|
const securityRuleConfigProviderInstance = this.solidRegistry.getSecurityRuleConfigProviderInstance(rule.securityRuleConfigProvider);
|
|
46
|
+
if (!securityRuleConfigProviderInstance) {
|
|
47
|
+
throw new Error(`Unable to resolve instance for security rule config provider: ${rule.securityRuleConfigProvider}`);
|
|
48
|
+
}
|
|
46
49
|
evaluatedRule = await securityRuleConfigProviderInstance.securityRuleConfig(activeUser, rule);
|
|
47
50
|
}
|
|
48
51
|
else {
|
|
@@ -54,7 +57,9 @@ export class SecurityRuleRepository extends SolidBaseRepository<SecurityRule> {
|
|
|
54
57
|
evaluatedRules.push(evaluatedRule);
|
|
55
58
|
|
|
56
59
|
} catch (error) {
|
|
57
|
-
this.logger.
|
|
60
|
+
this.logger.error(`Error parsing security rule: ${rule.securityRuleConfig}`, error);
|
|
61
|
+
this.logger.error(error.stack);
|
|
62
|
+
throw error;
|
|
58
63
|
}
|
|
59
64
|
}
|
|
60
65
|
|
|
@@ -104,7 +109,7 @@ export class SecurityRuleRepository extends SolidBaseRepository<SecurityRule> {
|
|
|
104
109
|
modelMetadataId: populatedSecurityRule.modelMetadata.id,
|
|
105
110
|
modelMetadataUserKey: populatedSecurityRule.modelMetadata.singularName,
|
|
106
111
|
securityRuleConfig: populatedSecurityRule.securityRuleConfig,
|
|
107
|
-
securityRuleConfigProvider:
|
|
112
|
+
securityRuleConfigProvider: populatedSecurityRule.securityRuleConfigProvider,
|
|
108
113
|
};
|
|
109
114
|
}
|
|
110
115
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { forwardRef, Inject, Injectable, Logger } from '@nestjs/common';
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
4
5
|
|
|
5
6
|
import { CreateDashboardDto } from 'src/dtos/create-dashboard.dto';
|
|
6
7
|
import { CreateEmailTemplateDto } from 'src/dtos/create-email-template.dto';
|
|
@@ -33,7 +34,7 @@ import { ViewMetadataService } from '../services/view-metadata.service';
|
|
|
33
34
|
import solidCoreMetadata from './seed-data/solid-core-metadata.json';
|
|
34
35
|
import { SystemFieldsSeederService } from './system-fields-seeder.service';
|
|
35
36
|
// import { CreateScheduledJobDto } from 'src/dtos/create-scheduled-job.dto';
|
|
36
|
-
import { ActionMetadata, MENU_ROLE_JOIN_TABLE_NAME, MENU_ROLE_JOIN_TABLE_NAME_MENU_COL, MENU_ROLE_JOIN_TABLE_NAME_ROLE_COL, MenuItemMetadata, ModuleMetadata, RoleMetadata } from 'src';
|
|
37
|
+
import { ActionMetadata, MENU_ROLE_JOIN_TABLE_NAME, MENU_ROLE_JOIN_TABLE_NAME_MENU_COL, MENU_ROLE_JOIN_TABLE_NAME_ROLE_COL, MenuItemMetadata, ModuleMetadata, RoleMetadata, SignUpDto } from 'src';
|
|
37
38
|
import { ADMIN_ROLE_NAME, INTERNAL_ROLE_NAME, INTERNAL_ROLE_PERMISSIONS, PUBLIC_ROLE_NAME } from 'src/dtos/create-role-metadata.dto';
|
|
38
39
|
import { CreateSavedFiltersDto } from 'src/dtos/create-saved-filters.dto';
|
|
39
40
|
import { CreateScheduledJobDto } from 'src/dtos/create-scheduled-job.dto';
|
|
@@ -195,7 +196,9 @@ export class ModuleMetadataSeederService {
|
|
|
195
196
|
// Setup default roles with permissions.
|
|
196
197
|
await this.setupDefaultRolesWithPermissions();
|
|
197
198
|
|
|
198
|
-
|
|
199
|
+
// Add a console log indicating seeding is finished. This needs to be console.log so that it looks proper when this code is run via CLI.
|
|
200
|
+
console.log(`Seeding completed.`);
|
|
201
|
+
//this.logger.log(`All Seeders finished`);
|
|
199
202
|
|
|
200
203
|
//FIXME: Handle displaying the created users credentials in a better way.
|
|
201
204
|
// this.logger.log(`Newly created username is: ${usersDetail?.length > 0 ? usersDetail[0]?.username : ''} and password is ${usersDetail?.length > 0 ? usersDetail[0]?.password : ''}`);
|
|
@@ -718,12 +721,36 @@ export class ModuleMetadataSeederService {
|
|
|
718
721
|
}
|
|
719
722
|
|
|
720
723
|
for (let l = 0; l < users.length; l++) {
|
|
721
|
-
const user = users[l];
|
|
724
|
+
const user: SignUpDto = users[l];
|
|
722
725
|
let exisitingUser = await this.userService.findOneByUsername(user.username);
|
|
723
726
|
if (!exisitingUser) {
|
|
724
|
-
|
|
727
|
+
let generatedAdminPassword: string | null = null;
|
|
728
|
+
if (user.username === 'sa') {
|
|
729
|
+
generatedAdminPassword = uuidv4();
|
|
730
|
+
user.password = generatedAdminPassword;
|
|
731
|
+
}
|
|
725
732
|
|
|
726
|
-
this.
|
|
733
|
+
exisitingUser = await this.authenticationService.signUp(user);
|
|
734
|
+
this.logger.log(`Newly created user ${user.username}`);
|
|
735
|
+
|
|
736
|
+
// Surface the generated SA password clearly to the operator.
|
|
737
|
+
if (generatedAdminPassword) {
|
|
738
|
+
const banner = [
|
|
739
|
+
'',
|
|
740
|
+
'============================================================',
|
|
741
|
+
' SYSTEM ADMIN USER CREATED',
|
|
742
|
+
'------------------------------------------------------------',
|
|
743
|
+
' Username : sa',
|
|
744
|
+
` Password : ${generatedAdminPassword}`,
|
|
745
|
+
'',
|
|
746
|
+
' Copy and store this password securely now.',
|
|
747
|
+
' It is shown only once during seeding.',
|
|
748
|
+
'============================================================',
|
|
749
|
+
''
|
|
750
|
+
].join('\n');
|
|
751
|
+
// Use console.log to ensure visibility even if logger formatting changes.
|
|
752
|
+
console.log(banner);
|
|
753
|
+
}
|
|
727
754
|
}
|
|
728
755
|
//FIXME: Create the user roles assignment logic here.
|
|
729
756
|
// now add Roles to user.
|
|
@@ -857,4 +884,4 @@ export class ModuleMetadataSeederService {
|
|
|
857
884
|
}
|
|
858
885
|
}
|
|
859
886
|
|
|
860
|
-
}
|
|
887
|
+
}
|