@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setting.service.js","sourceRoot":"","sources":["../../src/services/setting.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, ForbiddenException, forwardRef, Inject, Injectable } from '@nestjs/common';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { ConfigService, ConfigType } from '@nestjs/config';\nimport commonConfig from 'src/config/common.config';\nimport { iamConfig } from 'src/config/iam.config';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { CreateSettingDto } from 'src/dtos/create-setting.dto';\nimport { GetMcpUrlDto } from 'src/dtos/get-mcp-url.dto';\nimport { User } from 'src/entities/user.entity';\nimport { SettingRepository } from 'src/repository/setting.repository';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\nimport { CRUDService } from 'src/services/crud.service';\nimport { FileService } from 'src/services/file.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\nimport { Setting } from '../entities/setting.entity';\nimport { RequestContextService } from './request-context.service';\n\n@Injectable()\nexport class SettingService extends CRUDService<Setting> {\n constructor(\n @Inject(forwardRef(() => ModelMetadataService))\n readonly modelMetadataService: ModelMetadataService,\n readonly moduleMetadataService: ModuleMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @Inject(iamConfig.KEY) private readonly iamConfiguration: ConfigType<typeof iamConfig>,\n @Inject(commonConfig.KEY)\n private readonly commonConfiguration: ConfigType<typeof commonConfig>,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(Setting, 'default')\n // readonly repo: Repository<Setting>,\n readonly repo: SettingRepository,\n readonly moduleRef: ModuleRef,\n private readonly requestContextService: RequestContextService,\n @InjectRepository(User) private readonly userRepository: Repository<User>,\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'setting', 'solid-core', moduleRef\n );\n }\n\n async seedDefaultSettings(): Promise<void> {\n const settingsSeederData = {\n passwordlessRegistrationValidateWhat: this.iamConfiguration.passwordlessRegistrationValidateWhat,\n allowPublicRegistration: this.iamConfiguration.allowPublicRegistration,\n passwordBasedAuth: this.iamConfiguration.passwordBasedAuth,\n passwordLessAuth: this.iamConfiguration.passwordLessAuth,\n activateUserOnRegistration: this.iamConfiguration.activateUserOnRegistration,\n iamGoogleOAuthEnabled: false,\n authPagesLayout: \"center\",\n authPagesTheme: \"light\",\n appLogo: null,\n companylogo: null,\n favicon: null,\n appLogoPosition: \"in_form_view\",\n showAuthContent: false,\n appTitle: process.env.SOLID_APP_NAME || \"Solid App\",\n appSubtitle: process.env.SOLID_APP_SUBTITLE || \"Lorem Ipsum\",\n appDescription: process.env.SOLID_APP_DESCRIPTION || \"lorem ipsum\",\n showLegalLinks: false,\n appTnc: null,\n appPrivacyPolicy: null,\n defaultRole: this.iamConfiguration.defaultRole,\n shouldQueueEmails: this.commonConfiguration.shouldQueueEmails,\n shouldQueueSms: this.commonConfiguration.shouldQueueSms,\n enableDarkMode: true,\n copyright: null,\n enableUsername: true,\n enabledNotification: true,\n contactSupportEmail: null,\n contactSupportDisplayName: null,\n contactSupportIcon: null,\n authScreenRightBackgroundImage: null,\n authScreenLeftBackgroundImage: null,\n authScreenCenterBackgroundImage: null,\n authenticationPasswordRegex: this.iamConfiguration.PASSWORD_REGEX,\n authenticationPasswordRegexErrorMessage: this.iamConfiguration.PASSWORD_REGEX_ERROR_MESSAGE,\n authenticationPasswordComplexityDescription: this.iamConfiguration.PASSWORD_COMPLEXITY_DESC,\n solidXGenAiCodeBuilderConfig: JSON.stringify({\n defaultProvider: \"\",\n availableProviders: []\n }),\n showNameFieldsForRegistration: this.iamConfiguration.showNameFieldsForRegistration,\n forceChangePasswordOnFirstLogin: this.iamConfiguration.forceChangePasswordOnFirstLogin\n };\n\n const existingSettings = await this.repo.find();\n const existingKeys = new Set(existingSettings.map(s => s.key));\n\n const settingsToInsert: Setting[] = [];\n for (const [key, value] of Object.entries(settingsSeederData)) {\n if (!existingKeys.has(key)) {\n const setting = new Setting();\n setting.key = key;\n setting.value = typeof value === 'boolean' ? value.toString() :\n Array.isArray(value) ? value.join(',') :\n value === null || value === undefined ? null : String(value);\n settingsToInsert.push(setting);\n }\n }\n\n if (settingsToInsert.length > 0) {\n await this.repo.save(settingsToInsert);\n }\n }\n\n async wrapSettings(): Promise<Record<string, any>> {\n const settingsArray: Setting[] = await this.repo.find();\n\n if (!settingsArray || settingsArray.length === 0) {\n return this.getDefaultSettings();\n }\n\n const settingsMap: Record<string, any> = {};\n const arrayKeysToSkip = [\n 'authenticationPasswordRegex',\n 'authenticationPasswordRegexErrorMessage',\n 'authenticationPasswordComplexityDescription',\n ];\n for (const setting of settingsArray) {\n if (setting.key && setting.value !== undefined && setting.value !== null) {\n let value = setting.value;\n try {\n settingsMap[setting.key] = JSON.parse(value);\n } catch {\n if (value === 'true' || value === 'false') {\n settingsMap[setting.key] = value === 'true';\n } else if (!isNaN(Number(value)) && value.trim() !== '') {\n settingsMap[setting.key] = Number(value);\n } else if (!arrayKeysToSkip.includes(setting.key) && value.includes(',')) {\n settingsMap[setting.key] = value.split(',').map(item => item.trim());\n } else {\n settingsMap[setting.key] = value;\n }\n }\n\n // if (value === 'true' || value === 'false') {\n // settingsMap[setting.key] = value === 'true';\n // }\n // else if (!isNaN(Number(value)) && value.trim() !== '') {\n // settingsMap[setting.key] = Number(value);\n // }\n // else if (value.includes(',')) {\n // settingsMap[setting.key] = value.split(',').map(item => item.trim());\n // }\n // else {\n // settingsMap[setting.key] = value;\n // }\n }\n }\n\n const defaultSettings = this.getDefaultSettings();\n\n const mergedSettings = Object.keys(defaultSettings).reduce((acc, key) => {\n acc[key] = settingsMap[key] !== undefined ? settingsMap[key] : defaultSettings[key];\n return acc;\n }, {} as Record<string, any>);\n\n return mergedSettings;\n }\n\n private getDefaultSettings(): Record<string, any> {\n return {\n passwordlessRegistrationValidateWhat: this.iamConfiguration.passwordlessRegistrationValidateWhat,\n allowPublicRegistration: this.iamConfiguration.allowPublicRegistration,\n passwordBasedAuth: this.iamConfiguration.passwordBasedAuth,\n passwordLessAuth: this.iamConfiguration.passwordLessAuth,\n activateUserOnRegistration: this.iamConfiguration.activateUserOnRegistration,\n iamGoogleOAuthEnabled: false,\n authPagesLayout: \"center\",\n authPagesTheme: \"light\",\n appLogo: null,\n companylogo: null,\n favicon: null,\n appLogoPosition: \"in_form_view\", //in_form_view | in_image_view\n showAuthContent: false,\n appTitle: process.env.SOLID_APP_NAME || \"Solid App\",\n appSubtitle: null,\n appDescription: null,\n showLegalLinks: false,\n appTnc: null,\n appPrivacyPolicy: null,\n defaultRole: this.iamConfiguration.defaultRole,\n shouldQueueEmails: this.commonConfiguration.shouldQueueEmails,\n shouldQueueSms: this.commonConfiguration.shouldQueueSms,\n enableDarkMode: true,\n copyright: null,\n forceChangePasswordOnFirstLogin: this.iamConfiguration.forceChangePasswordOnFirstLogin,\n enableUsername: true,\n enabledNotification: true,\n contactSupportEmail: null,\n contactSupportDisplayName: null,\n contactSupportIcon: null,\n authScreenRightBackgroundImage: null,\n authScreenLeftBackgroundImage: null,\n authScreenCenterBackgroundImage: null,\n authenticationPasswordRegex: this.iamConfiguration.PASSWORD_REGEX,\n authenticationPasswordRegexErrorMessage: this.iamConfiguration.PASSWORD_REGEX_ERROR_MESSAGE,\n authenticationPasswordComplexityDescription: this.iamConfiguration.PASSWORD_COMPLEXITY_DESC,\n solidXGenAiCodeBuilderConfig: JSON.stringify({\n defaultProvider: \"\",\n availableProviders: []\n }),\n iamAutoGeneratedPassword: this.iamConfiguration.iamAutoGeneratedPassword,\n showNameFieldsForRegistration: this.iamConfiguration.showNameFieldsForRegistration\n };\n }\n\n async getConfigValue(settingKey: string) {\n try {\n const settingsArray: Setting[] = await this.repo.find();\n const settingEntry = settingsArray.find(setting => setting.key === settingKey);\n\n if (settingEntry && settingEntry.value !== null && settingEntry.value !== undefined) {\n const value = settingEntry.value;\n\n if (value === 'true' || value === 'false') {\n return value === 'true';\n }\n else if (!isNaN(Number(value)) && value.trim() !== '') {\n return Number(value);\n }\n else if (value.includes(',')) {\n return value.split(',').map(item => item.trim());\n }\n else {\n return value;\n }\n }\n\n const defaultSettings = this.getDefaultSettings();\n return defaultSettings[settingKey];\n } catch (error) {\n const defaultSettings = this.getDefaultSettings();\n return defaultSettings[settingKey];\n }\n }\n\n async updateSettings(\n settings: CreateSettingDto[] = [],\n uploadedFiles: Array<Express.Multer.File> = []\n ): Promise<Setting[]> {\n const activeUser = this.requestContextService.getActiveUser();\n const userId = activeUser?.sub;\n\n const existingSettings = await this.repo.find();\n\n const settingsToUpdate: Setting[] = [];\n const settingsToCreate: Setting[] = [];\n\n let user: User | null = null;\n const hasUserSettings = settings.some(dto => dto.type === 'user');\n if (hasUserSettings && userId) {\n user = await this.userRepository.findOne({ where: { id: userId } });\n }\n\n // Handle uploaded files\n if (uploadedFiles?.length) {\n for (const file of uploadedFiles) {\n const settingKey = file.fieldname;\n const relativeFileName = `${file.filename}-${file.originalname}`;\n const storagePath = `${this.configService.get('app-builder.fileStorageDir')}/${relativeFileName}`;\n const baseUrl = process.env.BASE_URL || '';\n const fileUrl = `${baseUrl}/${storagePath}`;\n\n await this.fileService.copyFile(file.path, storagePath);\n await this.fileService.deleteFile(file.path);\n\n const matchedDto = settings.find(dto => dto.key === settingKey);\n const settingType = matchedDto?.type ?? 'system';\n\n const existingSetting = existingSettings.find(s => s.key === settingKey);\n if (existingSetting) {\n existingSetting.value = fileUrl;\n existingSetting.type = settingType;\n settingsToUpdate.push(existingSetting);\n } else {\n const newSetting = new Setting();\n newSetting.key = settingKey;\n newSetting.value = fileUrl;\n newSetting.type = settingType;\n\n if (settingType === 'user' && user) {\n newSetting.user = user;\n }\n\n settingsToCreate.push(newSetting);\n }\n }\n }\n\n // Handle non-file settings\n for (const settingDto of settings) {\n if (uploadedFiles?.some(file => file.fieldname === settingDto.key)) {\n continue; // skip if already handled via file\n }\n\n const key = settingDto.key;\n // const value = settingDto.value ?? '';\n const rawValue = settingDto.value;\n const value = rawValue === null || rawValue === undefined ? null : String(rawValue);\n\n const settingType = settingDto.type ?? 'system';\n\n const existingSetting = existingSettings.find(s => s.key === key);\n if (existingSetting) {\n existingSetting.value = value;\n existingSetting.type = settingType;\n settingsToUpdate.push(existingSetting);\n } else {\n const newSetting = new Setting();\n newSetting.key = key;\n newSetting.value = value;\n newSetting.type = settingType;\n\n if (settingType === 'user' && user) {\n newSetting.user = user;\n }\n\n settingsToCreate.push(newSetting);\n }\n }\n\n if (settingsToUpdate.length > 0) {\n await this.repo.save(settingsToUpdate);\n }\n\n if (settingsToCreate.length > 0) {\n await this.repo.save(settingsToCreate);\n }\n\n return [...settingsToUpdate, ...settingsToCreate];\n }\n\n async getAllSettings(): Promise<{ system: Record<string, any>, user: Record<string, any> }> {\n const settingsArray = await this.repo.find({ relations: ['user'] });\n\n const system: Record<string, any> = {};\n const user: Record<string, any> = {};\n const arrayKeysToSkip = [\n 'authenticationPasswordRegex',\n 'authenticationPasswordRegexErrorMessage',\n 'authenticationPasswordComplexityDescription',\n ];\n for (const setting of settingsArray) {\n if (setting.key && setting.value !== undefined && setting.value !== null) {\n const value = setting.value;\n let parsedValue: any;\n\n try {\n parsedValue = JSON.parse(value);\n } catch {\n if (value === 'true' || value === 'false') {\n parsedValue = value === 'true';\n } else if (!isNaN(Number(value)) && value.trim() !== '') {\n parsedValue = Number(value);\n } else if (!arrayKeysToSkip.includes(setting.key) && value.includes(',')) {\n parsedValue = value.split(',').map(item => item.trim());\n } else {\n parsedValue = value;\n }\n }\n if (setting.type === 'user') {\n user[setting.key] = parsedValue;\n } else {\n system[setting.key] = parsedValue;\n }\n }\n }\n\n return { system, user };\n }\n\n async getMcpUrl(getMcpUrlDto: GetMcpUrlDto, solidRequestContext: any = {}): Promise<any> {\n\n const { showHeader, inListView } = getMcpUrlDto;\n\n if(process.env.MCP_ENABLED === 'false') {\n throw new ForbiddenException(ERROR_MESSAGES.FORBIDDEN);\n }\n\n if (solidRequestContext.activeUser) {\n const permissionNames = [\"SettingController.getMcpUrl\"];\n const matchingPermssions = solidRequestContext.activeUser.permissions.filter((p: any) => permissionNames.includes(p));\n const hasPermission = matchingPermssions.length > 0;\n if (!hasPermission) {\n throw new BadRequestException(ERROR_MESSAGES.FORBIDDEN);\n }\n }\n const apiKey = process.env.MCP_API_KEY;\n const userId = solidRequestContext.activeUser.sub;\n const mcpServerUrl = process.env.MCP_SERVER_URL;\n return { mcpUrl: `${mcpServerUrl}/static/frontend.html?solidx-mcp-api-key=${apiKey}&solidx-user-id=${userId}&solidx-show-header=${showHeader}&solidx-in-list-view=${inListView}` };\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"setting.service.js","sourceRoot":"","sources":["../../src/services/setting.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, ForbiddenException, forwardRef, Inject, Injectable } from '@nestjs/common';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { ConfigService, ConfigType } from '@nestjs/config';\nimport commonConfig from 'src/config/common.config';\nimport { iamConfig } from 'src/config/iam.config';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { CreateSettingDto } from 'src/dtos/create-setting.dto';\nimport { GetMcpUrlDto } from 'src/dtos/get-mcp-url.dto';\nimport { User } from 'src/entities/user.entity';\nimport { SettingRepository } from 'src/repository/setting.repository';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\nimport { CRUDService } from 'src/services/crud.service';\nimport { FileService } from 'src/services/file.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\nimport { Setting } from '../entities/setting.entity';\nimport { RequestContextService } from './request-context.service';\n\n@Injectable()\nexport class SettingService extends CRUDService<Setting> {\n constructor(\n @Inject(forwardRef(() => ModelMetadataService))\n readonly modelMetadataService: ModelMetadataService,\n readonly moduleMetadataService: ModuleMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @Inject(iamConfig.KEY) private readonly iamConfiguration: ConfigType<typeof iamConfig>,\n @Inject(commonConfig.KEY)\n private readonly commonConfiguration: ConfigType<typeof commonConfig>,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(Setting, 'default')\n // readonly repo: Repository<Setting>,\n readonly repo: SettingRepository,\n readonly moduleRef: ModuleRef,\n private readonly requestContextService: RequestContextService,\n @InjectRepository(User) private readonly userRepository: Repository<User>,\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'setting', 'solid-core', moduleRef\n );\n }\n\n async seedDefaultSettings(): Promise<void> {\n const settingsSeederData = this.getDefaultSettings();\n\n const existingSettings = await this.repo.find();\n const existingKeys = new Set(existingSettings.map(s => s.key));\n\n const settingsToInsert: Setting[] = [];\n for (const [key, value] of Object.entries(settingsSeederData)) {\n if (!existingKeys.has(key)) {\n const setting = new Setting();\n setting.key = key;\n setting.value = typeof value === 'boolean' ? value.toString() :\n Array.isArray(value) ? value.join(',') :\n value === null || value === undefined ? null : String(value);\n settingsToInsert.push(setting);\n }\n }\n\n if (settingsToInsert.length > 0) {\n await this.repo.save(settingsToInsert);\n }\n }\n\n async wrapSettings(): Promise<Record<string, any>> {\n const settingsArray: Setting[] = await this.repo.find();\n\n if (!settingsArray || settingsArray.length === 0) {\n return this.getDefaultSettings();\n }\n\n const settingsMap: Record<string, any> = {};\n const arrayKeysToSkip = [\n 'authenticationPasswordRegex',\n 'authenticationPasswordRegexErrorMessage',\n 'authenticationPasswordComplexityDescription',\n ];\n for (const setting of settingsArray) {\n if (setting.key && setting.value !== undefined && setting.value !== null) {\n let value = setting.value;\n try {\n settingsMap[setting.key] = JSON.parse(value);\n } catch {\n if (value === 'true' || value === 'false') {\n settingsMap[setting.key] = value === 'true';\n } else if (!isNaN(Number(value)) && value.trim() !== '') {\n settingsMap[setting.key] = Number(value);\n } else if (!arrayKeysToSkip.includes(setting.key) && value.includes(',')) {\n settingsMap[setting.key] = value.split(',').map(item => item.trim());\n } else {\n settingsMap[setting.key] = value;\n }\n }\n\n // if (value === 'true' || value === 'false') {\n // settingsMap[setting.key] = value === 'true';\n // }\n // else if (!isNaN(Number(value)) && value.trim() !== '') {\n // settingsMap[setting.key] = Number(value);\n // }\n // else if (value.includes(',')) {\n // settingsMap[setting.key] = value.split(',').map(item => item.trim());\n // }\n // else {\n // settingsMap[setting.key] = value;\n // }\n }\n }\n\n const defaultSettings = this.getDefaultSettings();\n\n const mergedSettings = Object.keys(defaultSettings).reduce((acc, key) => {\n acc[key] = settingsMap[key] !== undefined ? settingsMap[key] : defaultSettings[key];\n return acc;\n }, {} as Record<string, any>);\n\n return mergedSettings;\n }\n\n private getDefaultSettings(): Record<string, any> {\n return {\n passwordlessRegistrationValidateWhat: this.iamConfiguration.passwordlessRegistrationValidateWhat,\n allowPublicRegistration: this.iamConfiguration.allowPublicRegistration,\n passwordBasedAuth: this.iamConfiguration.passwordBasedAuth,\n passwordLessAuth: this.iamConfiguration.passwordLessAuth,\n activateUserOnRegistration: this.iamConfiguration.activateUserOnRegistration,\n iamGoogleOAuthEnabled: false,\n authPagesLayout: \"center\",\n authPagesTheme: \"light\",\n appLogo: null,\n companylogo: null,\n favicon: null,\n // in_form_view | in_image_view\n appLogoPosition: \"in_form_view\",\n showAuthContent: false,\n appTitle: process.env.SOLID_APP_NAME || \"Solid App\",\n appSubtitle: process.env.SOLID_APP_SUBTITLE || \"\",\n appDescription: process.env.SOLID_APP_DESCRIPTION || \"\",\n showLegalLinks: false,\n appTnc: null,\n appPrivacyPolicy: null,\n defaultRole: this.iamConfiguration.defaultRole,\n shouldQueueEmails: this.commonConfiguration.shouldQueueEmails,\n shouldQueueSms: this.commonConfiguration.shouldQueueSms,\n enableDarkMode: true,\n copyright: null,\n forceChangePasswordOnFirstLogin: this.iamConfiguration.forceChangePasswordOnFirstLogin,\n enableUsername: true,\n enabledNotification: true,\n contactSupportEmail: null,\n contactSupportDisplayName: null,\n contactSupportIcon: null,\n authScreenRightBackgroundImage: null,\n authScreenLeftBackgroundImage: null,\n authScreenCenterBackgroundImage: null,\n authenticationPasswordRegex: this.iamConfiguration.PASSWORD_REGEX,\n authenticationPasswordRegexErrorMessage: this.iamConfiguration.PASSWORD_REGEX_ERROR_MESSAGE,\n authenticationPasswordComplexityDescription: this.iamConfiguration.PASSWORD_COMPLEXITY_DESC,\n solidXGenAiCodeBuilderConfig: JSON.stringify({\n defaultProvider: \"\",\n availableProviders: []\n }),\n iamAutoGeneratedPassword: this.iamConfiguration.iamAutoGeneratedPassword,\n showNameFieldsForRegistration: this.iamConfiguration.showNameFieldsForRegistration\n };\n }\n\n // private async getSettingsFromRepo(): Promise<Setting[]> {\n // const cachedSettings = await this.cacheManager.get('cached-system-settings');\n // }\n\n async getConfigValue(settingKey: string) {\n try {\n const settingsArray: Setting[] = await this.repo.find();\n const settingEntry = settingsArray.find(setting => setting.key === settingKey);\n\n if (settingEntry && settingEntry.value !== null && settingEntry.value !== undefined) {\n const value = settingEntry.value;\n\n if (value === 'true' || value === 'false') {\n return value === 'true';\n }\n else if (!isNaN(Number(value)) && value.trim() !== '') {\n return Number(value);\n }\n else if (value.includes(',')) {\n return value.split(',').map(item => item.trim());\n }\n else {\n return value;\n }\n }\n\n const defaultSettings = this.getDefaultSettings();\n return defaultSettings[settingKey];\n } catch (error) {\n const defaultSettings = this.getDefaultSettings();\n return defaultSettings[settingKey];\n }\n }\n\n async updateSettings(settings: CreateSettingDto[] = [], uploadedFiles: Array<Express.Multer.File> = []): Promise<Setting[]> {\n const activeUser = this.requestContextService.getActiveUser();\n const userId = activeUser?.sub;\n\n const existingSettings = await this.repo.find();\n\n const settingsToUpdate: Setting[] = [];\n const settingsToCreate: Setting[] = [];\n\n let user: User | null = null;\n const hasUserSettings = settings.some(dto => dto.type === 'user');\n if (hasUserSettings && userId) {\n user = await this.userRepository.findOne({ where: { id: userId } });\n }\n\n // Handle uploaded files\n if (uploadedFiles?.length) {\n for (const file of uploadedFiles) {\n const settingKey = file.fieldname;\n const relativeFileName = `${file.filename}-${file.originalname}`;\n const storagePath = `${this.configService.get('app-builder.fileStorageDir')}/${relativeFileName}`;\n const baseUrl = process.env.BASE_URL || '';\n const fileUrl = `${baseUrl}/${storagePath}`;\n\n await this.fileService.copyFile(file.path, storagePath);\n await this.fileService.deleteFile(file.path);\n\n const matchedDto = settings.find(dto => dto.key === settingKey);\n const settingType = matchedDto?.type ?? 'system';\n\n const existingSetting = existingSettings.find(s => s.key === settingKey);\n if (existingSetting) {\n existingSetting.value = fileUrl;\n existingSetting.type = settingType;\n settingsToUpdate.push(existingSetting);\n } else {\n const newSetting = new Setting();\n newSetting.key = settingKey;\n newSetting.value = fileUrl;\n newSetting.type = settingType;\n\n if (settingType === 'user' && user) {\n newSetting.user = user;\n }\n\n settingsToCreate.push(newSetting);\n }\n }\n }\n\n // Handle non-file settings\n for (const settingDto of settings) {\n if (uploadedFiles?.some(file => file.fieldname === settingDto.key)) {\n continue; // skip if already handled via file\n }\n\n const key = settingDto.key;\n // const value = settingDto.value ?? '';\n const rawValue = settingDto.value;\n const value = rawValue === null || rawValue === undefined ? null : String(rawValue);\n\n const settingType = settingDto.type ?? 'system';\n\n const existingSetting = existingSettings.find(s => s.key === key);\n if (existingSetting) {\n existingSetting.value = value;\n existingSetting.type = settingType;\n settingsToUpdate.push(existingSetting);\n } else {\n const newSetting = new Setting();\n newSetting.key = key;\n newSetting.value = value;\n newSetting.type = settingType;\n\n if (settingType === 'user' && user) {\n newSetting.user = user;\n }\n\n settingsToCreate.push(newSetting);\n }\n }\n\n if (settingsToUpdate.length > 0) {\n await this.repo.save(settingsToUpdate);\n }\n\n if (settingsToCreate.length > 0) {\n await this.repo.save(settingsToCreate);\n }\n\n return [...settingsToUpdate, ...settingsToCreate];\n }\n\n async getAllSettings(): Promise<{ system: Record<string, any>, user: Record<string, any> }> {\n const settingsArray = await this.repo.find({ relations: ['user'] });\n\n const system: Record<string, any> = {};\n const user: Record<string, any> = {};\n const arrayKeysToSkip = [\n 'authenticationPasswordRegex',\n 'authenticationPasswordRegexErrorMessage',\n 'authenticationPasswordComplexityDescription',\n ];\n for (const setting of settingsArray) {\n if (setting.key && setting.value !== undefined && setting.value !== null) {\n const value = setting.value;\n let parsedValue: any;\n\n try {\n parsedValue = JSON.parse(value);\n } catch {\n if (value === 'true' || value === 'false') {\n parsedValue = value === 'true';\n } else if (!isNaN(Number(value)) && value.trim() !== '') {\n parsedValue = Number(value);\n } else if (!arrayKeysToSkip.includes(setting.key) && value.includes(',')) {\n parsedValue = value.split(',').map(item => item.trim());\n } else {\n parsedValue = value;\n }\n }\n if (setting.type === 'user') {\n user[setting.key] = parsedValue;\n } else {\n system[setting.key] = parsedValue;\n }\n }\n }\n\n return { system, user };\n }\n\n async getMcpUrl(getMcpUrlDto: GetMcpUrlDto, solidRequestContext: any = {}): Promise<any> {\n\n const { showHeader, inListView } = getMcpUrlDto;\n\n if (process.env.MCP_ENABLED === 'false') {\n throw new ForbiddenException(ERROR_MESSAGES.FORBIDDEN);\n }\n\n if (solidRequestContext.activeUser) {\n const permissionNames = [\"SettingController.getMcpUrl\"];\n const matchingPermssions = solidRequestContext.activeUser.permissions.filter((p: any) => permissionNames.includes(p));\n const hasPermission = matchingPermssions.length > 0;\n if (!hasPermission) {\n throw new BadRequestException(ERROR_MESSAGES.FORBIDDEN);\n }\n }\n const apiKey = process.env.MCP_API_KEY;\n const userId = solidRequestContext.activeUser.sub;\n const mcpServerUrl = process.env.MCP_SERVER_URL;\n return { mcpUrl: `${mcpServerUrl}/static/frontend.html?solidx-mcp-api-key=${apiKey}&solidx-user-id=${userId}&solidx-show-header=${showHeader}&solidx-in-list-view=${inListView}` };\n }\n\n}\n"]}
|
|
@@ -18,18 +18,18 @@ class Msg91BaseSMSService {
|
|
|
18
18
|
throw new Error(`Msg91 does not support sending plain text messages, you need to register a template and use the templateId to send the SMS.`);
|
|
19
19
|
}
|
|
20
20
|
async sendSMSUsingTemplate(to, templateName, templateParams, shouldQueueSms = false) {
|
|
21
|
-
const
|
|
22
|
-
if (!
|
|
21
|
+
const smsTemplate = await this.smsTemplateService.findOneByName(templateName);
|
|
22
|
+
if (!smsTemplate) {
|
|
23
23
|
throw new Error(`Invalid template name ${templateName}`);
|
|
24
24
|
}
|
|
25
25
|
let body = null;
|
|
26
26
|
let templateId = null;
|
|
27
|
-
if (
|
|
28
|
-
const bodyTemplate = handlebars_1.default.compile(
|
|
27
|
+
if (smsTemplate.body) {
|
|
28
|
+
const bodyTemplate = handlebars_1.default.compile(smsTemplate.body);
|
|
29
29
|
body = bodyTemplate(templateParams);
|
|
30
30
|
}
|
|
31
|
-
if (
|
|
32
|
-
templateId =
|
|
31
|
+
if (smsTemplate.smsProviderTemplateId) {
|
|
32
|
+
templateId = smsTemplate.smsProviderTemplateId;
|
|
33
33
|
}
|
|
34
34
|
if (!body && !templateId) {
|
|
35
35
|
throw new Error(`Invalid template, neither body nor templateId specified on template with name ${templateName}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Msg91BaseSMSService.js","sourceRoot":"","sources":["../../../src/services/sms/Msg91BaseSMSService.ts"],"names":[],"mappings":";;;;;;AAAA,2CAAwC;AAExC,4DAAoC;AAOpC,MAAsB,mBAAmB;IAErC,YACuB,mBAAoD,EACpD,YAAoB,EACpB,gBAAuC,EACvC,kBAAsC;QAHtC,wBAAmB,GAAnB,mBAAmB,CAAiC;QACpD,iBAAY,GAAZ,YAAY,CAAQ;QACpB,qBAAgB,GAAhB,gBAAgB,CAAuB;QACvC,uBAAkB,GAAlB,kBAAkB,CAAoB;QAL1C,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAM7D,CAAC;IAEL,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,eAAwB;QACxD,MAAM,IAAI,KAAK,CAAC,6HAA6H,CAAC,CAAC;IACnJ,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,EAAU,EAAE,YAAoB,EAAE,cAAmB,EAAE,cAAc,GAAG,KAAK;QAEpG,MAAM,
|
|
1
|
+
{"version":3,"file":"Msg91BaseSMSService.js","sourceRoot":"","sources":["../../../src/services/sms/Msg91BaseSMSService.ts"],"names":[],"mappings":";;;;;;AAAA,2CAAwC;AAExC,4DAAoC;AAOpC,MAAsB,mBAAmB;IAErC,YACuB,mBAAoD,EACpD,YAAoB,EACpB,gBAAuC,EACvC,kBAAsC;QAHtC,wBAAmB,GAAnB,mBAAmB,CAAiC;QACpD,iBAAY,GAAZ,YAAY,CAAQ;QACpB,qBAAgB,GAAhB,gBAAgB,CAAuB;QACvC,uBAAkB,GAAlB,kBAAkB,CAAoB;QAL1C,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAM7D,CAAC;IAEL,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,eAAwB;QACxD,MAAM,IAAI,KAAK,CAAC,6HAA6H,CAAC,CAAC;IACnJ,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,EAAU,EAAE,YAAoB,EAAE,cAAmB,EAAE,cAAc,GAAG,KAAK;QAEpG,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAC9E,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAC;QAC7D,CAAC;QAGD,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,UAAU,GAAG,IAAI,CAAC;QAItB,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,oBAAU,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,WAAW,CAAC,qBAAqB,EAAE,CAAC;YACpC,UAAU,GAAG,WAAW,CAAC,qBAAqB,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iFAAiF,YAAY,EAAE,CAAC,CAAC;QACrH,CAAC;QAED,MAAM,OAAO,GAAG;YACZ,OAAO,EAAE;gBACL,GAAG,cAAc;gBACjB,EAAE,EAAE,EAAE;gBACN,UAAU,EAAE,UAAU;aACzB;SAGJ,CAAC;QAGF,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;aAEI,IAAI,cAAc,KAAK,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACpF,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;aAEI,CAAC;YACF,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,OAAO;QAC/B,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;QAG/B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,iBAAiB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;CAGJ;AAtED,kDAsEC","sourcesContent":["import { Logger } from \"@nestjs/common\";\nimport { ConfigType } from \"@nestjs/config\";\nimport Handlebars from \"handlebars\";\nimport commonConfig from \"src/config/common.config\";\nimport { QueueMessage } from \"src/interfaces/mq\";\nimport { SmsTemplateService } from \"../sms-template.service\";\nimport { ISMS } from \"../../interfaces\";\nimport { PublisherFactory } from \"../queues/publisher-factory.service\";\n\nexport abstract class Msg91BaseSMSService implements ISMS {\n protected readonly logger = new Logger(Msg91BaseSMSService.name);\n constructor(\n protected readonly commonConfiguration: ConfigType<typeof commonConfig>,\n protected readonly smsPublisher: string,\n protected readonly publisherFactory: PublisherFactory<any>,\n protected readonly smsTemplateService: SmsTemplateService,\n ) { }\n\n sendSMS(_to: string, _body: string, _shouldQueueSms: boolean): Promise<void> {\n throw new Error(`Msg91 does not support sending plain text messages, you need to register a template and use the templateId to send the SMS.`);\n }\n\n async sendSMSUsingTemplate(to: string, templateName: string, templateParams: any, shouldQueueSms = false): Promise<any> {\n // Load template and evaluate it. \n const smsTemplate = await this.smsTemplateService.findOneByName(templateName);\n if (!smsTemplate) {\n throw new Error(`Invalid template name ${templateName}`);\n }\n\n // Evaluate the body template.\n let body = null;\n let templateId = null;\n\n // The below code is only for reference, msh91 maintains the SMS templates in their database, and we need to only specify the templateId. \n // The below was designed assuming that there are certain sms gateways who do not work this way.\n if (smsTemplate.body) {\n const bodyTemplate = Handlebars.compile(smsTemplate.body);\n body = bodyTemplate(templateParams);\n }\n if (smsTemplate.smsProviderTemplateId) {\n templateId = smsTemplate.smsProviderTemplateId;\n }\n if (!body && !templateId) {\n throw new Error(`Invalid template, neither body nor templateId specified on template with name ${templateName}`);\n }\n\n const message = {\n payload: {\n ...templateParams,\n to: to,\n templateId: templateId,\n },\n // parentEntity: 'Address', //FIXME Need to dynamically set this\n // parentEntityId: 23, //FIXME Need to dynamically set this\n };\n\n // Send using queue if the developer has explicitly invoked with true.\n if (shouldQueueSms === true) {\n await this.sendSMSAsynchronously(message);\n }\n // If developer has not, however system config mandates that we send using queue, still we send.\n else if (shouldQueueSms === false && this.commonConfiguration.shouldQueueSms === true) {\n await this.sendSMSAsynchronously(message);\n }\n // Else we send synch\n else {\n await this.sendSMSSynchronously(message);\n }\n }\n\n async sendSMSAsynchronously(message) {\n const { to } = message.payload;\n // this.notificationPublisherService.publish(message);\n // this.smsPublisher.publish(message);\n this.publisherFactory.publish(message, this.smsPublisher);\n this.logger.debug(`Queueing SMS to ${to} with message ${JSON.stringify(message)}`);\n }\n\n abstract sendSMSSynchronously(message: QueueMessage<any>): Promise<any>\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Msg91OTPService.d.ts","sourceRoot":"","sources":["../../../src/services/sms/Msg91OTPService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"Msg91OTPService.d.ts","sourceRoot":"","sources":["../../../src/services/sms/Msg91OTPService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAUvE,qBAEa,eAAgB,SAAQ,mBAAoB,YAAW,IAAI;IAMhE,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAH5B,mBAAmB,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EACpD,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACvC,kBAAkB,EAAE,kBAAkB,EACrB,WAAW,EAAE,WAAW;IAKvC,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAQpE,OAAO,CAAC,mBAAmB;CAS9B"}
|
|
@@ -22,9 +22,10 @@ const common_config_1 = __importDefault(require("../../config/common.config"));
|
|
|
22
22
|
const sms_template_service_1 = require("../sms-template.service");
|
|
23
23
|
const Msg91BaseSMSService_1 = require("./Msg91BaseSMSService");
|
|
24
24
|
const publisher_factory_service_1 = require("../queues/publisher-factory.service");
|
|
25
|
+
const sms_provider_decorator_1 = require("../../decorators/sms-provider.decorator");
|
|
25
26
|
let Msg91OTPService = class Msg91OTPService extends Msg91BaseSMSService_1.Msg91BaseSMSService {
|
|
26
27
|
constructor(commonConfiguration, publisherFactory, smsTemplateService, httpService) {
|
|
27
|
-
super(commonConfiguration, '
|
|
28
|
+
super(commonConfiguration, 'Msg91OTPQueuePublisher', publisherFactory, smsTemplateService);
|
|
28
29
|
this.httpService = httpService;
|
|
29
30
|
}
|
|
30
31
|
async sendSMSSynchronously(message) {
|
|
@@ -47,6 +48,7 @@ let Msg91OTPService = class Msg91OTPService extends Msg91BaseSMSService_1.Msg91B
|
|
|
47
48
|
exports.Msg91OTPService = Msg91OTPService;
|
|
48
49
|
exports.Msg91OTPService = Msg91OTPService = __decorate([
|
|
49
50
|
(0, common_1.Injectable)(),
|
|
51
|
+
(0, sms_provider_decorator_1.SmsProvider)(),
|
|
50
52
|
__param(0, (0, common_1.Inject)(common_config_1.default.KEY)),
|
|
51
53
|
__metadata("design:paramtypes", [void 0, publisher_factory_service_1.PublisherFactory,
|
|
52
54
|
sms_template_service_1.SmsTemplateService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Msg91OTPService.js","sourceRoot":"","sources":["../../../src/services/sms/Msg91OTPService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,yCAA4C;AAC5C,2CAAoD;AAEpD,+EAAoD;AAEpD,kEAA6D;AAC7D,+DAA4D;AAE5D,mFAAuE;
|
|
1
|
+
{"version":3,"file":"Msg91OTPService.js","sourceRoot":"","sources":["../../../src/services/sms/Msg91OTPService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,yCAA4C;AAC5C,2CAAoD;AAEpD,+EAAoD;AAEpD,kEAA6D;AAC7D,+DAA4D;AAE5D,mFAAuE;AACvE,oFAAoE;AAW7D,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,yCAAmB;IACpD,YAEI,mBAAoD,EACpD,gBAAuC,EACvC,kBAAsC,EACrB,WAAwB;QAEzC,KAAK,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QAF1E,gBAAW,GAAX,WAAW,CAAa;IAG7C,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,OAA0B;QACjD,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;QAChD,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAA;QAC9G,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,QAAQ,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;QAClG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,aAAa,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IAEO,mBAAmB,CAAC,MAAiB;QACzC,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;QAC7D,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,EAAE,CAAC;IACd,CAAC;CACJ,CAAA;AA5BY,0CAAe;0BAAf,eAAe;IAF3B,IAAA,mBAAU,GAAE;IACZ,IAAA,oCAAW,GAAE;IAGL,WAAA,IAAA,eAAM,EAAC,uBAAY,CAAC,GAAG,CAAC,CAAA;6CAEP,4CAAgB;QACd,yCAAkB;QACR,mBAAW;GANpC,eAAe,CA4B3B","sourcesContent":["import { HttpService } from \"@nestjs/axios\";\nimport { Inject, Injectable } from \"@nestjs/common\";\nimport { ConfigType } from \"@nestjs/config\";\nimport commonConfig from \"src/config/common.config\";\nimport { QueueMessage } from \"src/interfaces/mq\";\nimport { SmsTemplateService } from \"../sms-template.service\";\nimport { Msg91BaseSMSService } from \"./Msg91BaseSMSService\";\nimport { ISMS } from \"../../interfaces\";\nimport { PublisherFactory } from \"../queues/publisher-factory.service\";\nimport { SmsProvider } from \"src/decorators/sms-provider.decorator\";\n\ninterface OtpParams {\n otp: string,\n template_id: string,\n mobile: string,\n authkey: string\n}\n\n@Injectable()\n@SmsProvider()\nexport class Msg91OTPService extends Msg91BaseSMSService implements ISMS {\n constructor(\n @Inject(commonConfig.KEY)\n commonConfiguration: ConfigType<typeof commonConfig>,\n publisherFactory: PublisherFactory<any>,\n smsTemplateService: SmsTemplateService,\n private readonly httpService: HttpService,\n ) {\n super(commonConfiguration, 'Msg91OTPQueuePublisher', publisherFactory, smsTemplateService);\n }\n\n async sendSMSSynchronously(message: QueueMessage<any>): Promise<any> {\n const { to, templateId, otp } = message.payload;\n const params = { otp, template_id: templateId, mobile: to, authkey: this.commonConfiguration.msg91Sms.apiKey }\n const otpUrl = `${this.commonConfiguration.msg91Sms.url}/otp?${this.paramsToQueryString(params)}`;\n await this.httpService.axiosRef.post(otpUrl, {});\n this.logger.debug(`Sending OTP to ${to} with url ${otpUrl}`);\n }\n\n private paramsToQueryString(params: OtpParams): string {\n const qsArray: string[] = []\n const paramKeys = Object.keys(params)\n for (const key of paramKeys) {\n qsArray.push(`${key}=${encodeURIComponent(params[key])}`)\n }\n const qs = qsArray.join(\"&\");\n return qs;\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Msg91SMSService.d.ts","sourceRoot":"","sources":["../../../src/services/sms/Msg91SMSService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"Msg91SMSService.d.ts","sourceRoot":"","sources":["../../../src/services/sms/Msg91SMSService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAGvE,qBAEa,eAAgB,SAAQ,mBAAoB,YAAW,IAAI;IAOhE,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAJ5B,mBAAmB,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EAEpD,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACvC,kBAAkB,EAAE,kBAAkB,EACrB,WAAW,EAAE,WAAW;IAKvC,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;CAOvE"}
|
|
@@ -22,9 +22,10 @@ const common_config_1 = __importDefault(require("../../config/common.config"));
|
|
|
22
22
|
const sms_template_service_1 = require("../sms-template.service");
|
|
23
23
|
const Msg91BaseSMSService_1 = require("./Msg91BaseSMSService");
|
|
24
24
|
const publisher_factory_service_1 = require("../queues/publisher-factory.service");
|
|
25
|
+
const sms_provider_decorator_1 = require("../../decorators/sms-provider.decorator");
|
|
25
26
|
let Msg91SMSService = class Msg91SMSService extends Msg91BaseSMSService_1.Msg91BaseSMSService {
|
|
26
27
|
constructor(commonConfiguration, publisherFactory, smsTemplateService, httpService) {
|
|
27
|
-
super(commonConfiguration, '
|
|
28
|
+
super(commonConfiguration, 'Msg91SmsQueuePublisher', publisherFactory, smsTemplateService);
|
|
28
29
|
this.httpService = httpService;
|
|
29
30
|
}
|
|
30
31
|
async sendSMSSynchronously(message) {
|
|
@@ -38,6 +39,7 @@ let Msg91SMSService = class Msg91SMSService extends Msg91BaseSMSService_1.Msg91B
|
|
|
38
39
|
exports.Msg91SMSService = Msg91SMSService;
|
|
39
40
|
exports.Msg91SMSService = Msg91SMSService = __decorate([
|
|
40
41
|
(0, common_1.Injectable)(),
|
|
42
|
+
(0, sms_provider_decorator_1.SmsProvider)(),
|
|
41
43
|
__param(0, (0, common_1.Inject)(common_config_1.default.KEY)),
|
|
42
44
|
__metadata("design:paramtypes", [void 0, publisher_factory_service_1.PublisherFactory,
|
|
43
45
|
sms_template_service_1.SmsTemplateService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Msg91SMSService.js","sourceRoot":"","sources":["../../../src/services/sms/Msg91SMSService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,yCAA4C;AAC5C,2CAAoD;AAEpD,+EAAoD;AAEpD,kEAA6D;AAC7D,+DAA4D;AAE5D,mFAAuE;
|
|
1
|
+
{"version":3,"file":"Msg91SMSService.js","sourceRoot":"","sources":["../../../src/services/sms/Msg91SMSService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,yCAA4C;AAC5C,2CAAoD;AAEpD,+EAAoD;AAEpD,kEAA6D;AAC7D,+DAA4D;AAE5D,mFAAuE;AACvE,oFAAoE;AAI7D,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,yCAAmB;IACpD,YAEI,mBAAoD,EAEpD,gBAAuC,EACvC,kBAAsC,EACrB,WAAwB;QAEzC,KAAK,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;QAFzE,gBAAW,GAAX,WAAW,CAAa;IAG7C,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,OAA0B;QACjD,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;QAC9D,MAAM,IAAI,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,cAAc,EAAE,CAAC,EAAE,CAAC;QAC3G,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxE,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACzG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvH,CAAC;CACJ,CAAA;AAnBY,0CAAe;0BAAf,eAAe;IAF3B,IAAA,mBAAU,GAAE;IACZ,IAAA,oCAAW,GAAE;IAGL,WAAA,IAAA,eAAM,EAAC,uBAAY,CAAC,GAAG,CAAC,CAAA;6CAGP,4CAAgB;QACd,yCAAkB;QACR,mBAAW;GAPpC,eAAe,CAmB3B","sourcesContent":["import { HttpService } from \"@nestjs/axios\";\nimport { Inject, Injectable } from \"@nestjs/common\";\nimport { ConfigType } from \"@nestjs/config\";\nimport commonConfig from \"src/config/common.config\";\nimport { QueueMessage } from \"src/interfaces/mq\";\nimport { SmsTemplateService } from \"../sms-template.service\";\nimport { Msg91BaseSMSService } from \"./Msg91BaseSMSService\";\nimport { ISMS } from \"../../interfaces\";\nimport { PublisherFactory } from \"../queues/publisher-factory.service\";\nimport { SmsProvider } from \"src/decorators/sms-provider.decorator\";\n\n@Injectable()\n@SmsProvider()\nexport class Msg91SMSService extends Msg91BaseSMSService implements ISMS {\n constructor(\n @Inject(commonConfig.KEY)\n commonConfiguration: ConfigType<typeof commonConfig>,\n // smsPublisher: SmsQueuePublisher,\n publisherFactory: PublisherFactory<any>,\n smsTemplateService: SmsTemplateService,\n private readonly httpService: HttpService,\n ) {\n super(commonConfiguration, 'Msg91SmsQueuePublisher', publisherFactory, smsTemplateService)\n }\n\n async sendSMSSynchronously(message: QueueMessage<any>): Promise<any> {\n const { to, templateId, ...templateParams } = message.payload;\n const body = { template_id: templateId, short_url: \"0\", recipients: [{ mobiles: to, ...templateParams }] };\n const headers = { \"authkey\": this.commonConfiguration.msg91Sms.apiKey };\n await this.httpService.axiosRef.post(`${this.commonConfiguration.msg91Sms.url}/flow`, body, { headers });\n this.logger.debug(`Sending SMS to ${to} with body ${JSON.stringify(body)} and headers ${JSON.stringify(headers)}`);\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TwilioSMSService.d.ts","sourceRoot":"","sources":["../../../src/services/sms/TwilioSMSService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"TwilioSMSService.d.ts","sourceRoot":"","sources":["../../../src/services/sms/TwilioSMSService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIjD,qBAEa,gBAAiB,YAAW,IAAI;IAKrC,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,kBAAkB;IAN9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAIhD,mBAAmB,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EACpD,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACvC,kBAAkB,EAAE,kBAAkB;IAG5C,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IA+BxE,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAoBlH,qBAAqB,CAAC,OAAO,KAAA;IAM7B,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;CAoCvE"}
|
|
@@ -23,6 +23,7 @@ const common_config_1 = __importDefault(require("../../config/common.config"));
|
|
|
23
23
|
const sms_template_service_1 = require("../sms-template.service");
|
|
24
24
|
const publisher_factory_service_1 = require("../queues/publisher-factory.service");
|
|
25
25
|
const twilio_1 = __importDefault(require("twilio"));
|
|
26
|
+
const sms_provider_decorator_1 = require("../../decorators/sms-provider.decorator");
|
|
26
27
|
let TwilioSMSService = TwilioSMSService_1 = class TwilioSMSService {
|
|
27
28
|
constructor(commonConfiguration, publisherFactory, smsTemplateService) {
|
|
28
29
|
this.commonConfiguration = commonConfiguration;
|
|
@@ -108,6 +109,7 @@ let TwilioSMSService = TwilioSMSService_1 = class TwilioSMSService {
|
|
|
108
109
|
exports.TwilioSMSService = TwilioSMSService;
|
|
109
110
|
exports.TwilioSMSService = TwilioSMSService = TwilioSMSService_1 = __decorate([
|
|
110
111
|
(0, common_1.Injectable)(),
|
|
112
|
+
(0, sms_provider_decorator_1.SmsProvider)(),
|
|
111
113
|
__param(0, (0, common_1.Inject)(common_config_1.default.KEY)),
|
|
112
114
|
__metadata("design:paramtypes", [void 0, publisher_factory_service_1.PublisherFactory,
|
|
113
115
|
sms_template_service_1.SmsTemplateService])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TwilioSMSService.js","sourceRoot":"","sources":["../../../src/services/sms/TwilioSMSService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,4DAAoC;AACpC,2CAA4D;AAE5D,+EAAoD;AACpD,kEAA6D;AAE7D,mFAAuE;AACvE,oDAA4B;
|
|
1
|
+
{"version":3,"file":"TwilioSMSService.js","sourceRoot":"","sources":["../../../src/services/sms/TwilioSMSService.ts"],"names":[],"mappings":"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","sourcesContent":["import Handlebars from \"handlebars\";\nimport { Inject, Injectable, Logger } from \"@nestjs/common\";\nimport { ConfigType } from \"@nestjs/config\";\nimport commonConfig from \"src/config/common.config\";\nimport { SmsTemplateService } from \"../sms-template.service\";\nimport { ISMS } from \"../../interfaces\";\nimport { PublisherFactory } from \"../queues/publisher-factory.service\";\nimport twilio from 'twilio';\nimport { QueueMessage } from \"src/interfaces/mq\";\nimport { SmsProvider } from \"src/decorators/sms-provider.decorator\";\n\n\n@Injectable()\n@SmsProvider()\nexport class TwilioSMSService implements ISMS {\n private readonly logger = new Logger(TwilioSMSService.name);\n\n constructor(\n @Inject(commonConfig.KEY)\n private commonConfiguration: ConfigType<typeof commonConfig>,\n private publisherFactory: PublisherFactory<any>,\n private smsTemplateService: SmsTemplateService,\n ) { }\n\n async sendSMS(to: string, body: string, shouldQueueSms: boolean): Promise<any> {\n const accountSid = this.commonConfiguration.twilio.accountSid;\n const authToken = this.commonConfiguration.twilio.authToken;\n const twilioNumber = this.commonConfiguration.twilio.number;\n if (!accountSid || !authToken || !twilioNumber) {\n throw new Error(\"Missing COMMON_TWILIO_ACCOUNT_SID or COMMON_TWILIO_AUTH_TOKEN or COMMON_TWILIO_NUMBER in env.\");\n }\n\n const message = {\n payload: {\n body: body,\n to: to,\n },\n };\n\n // Send using queue if the developer has explicitly invoked with true.\n if (shouldQueueSms === true) {\n await this.sendSMSAsynchronously(message);\n }\n // If developer has not, however system config mandates that we send using queue, still we send.\n else if (shouldQueueSms === false && this.commonConfiguration.shouldQueueSms === true) {\n await this.sendSMSAsynchronously(message);\n }\n // Else we send synch\n else {\n await this.sendSMSSynchronously(message);\n }\n\n return message;\n }\n\n async sendSMSUsingTemplate(to: string, templateName: string, templateParams: any, shouldQueueSms: boolean): Promise<any> {\n // Load template and evaluate it.\n const smsTemplate = await this.smsTemplateService.findOneByName(templateName);\n if (!smsTemplate) {\n throw new Error(`Invalid template name ${templateName}`);\n }\n\n // Evaluate the body template.\n let body = '';\n try {\n const bodyTemplate = Handlebars.compile(smsTemplate.body);\n body = bodyTemplate(templateParams);\n } catch (error) {\n throw new Error('Unable to compile sms template body');\n }\n // Finally send the email.\n return await this.sendSMS(to, body, shouldQueueSms);\n\n }\n\n async sendSMSAsynchronously(message) {\n const { to } = message.payload;\n this.publisherFactory.publish(message, 'TwilioSmsQueuePublisher');\n this.logger.debug(`Queueing SMS to ${to} with message ${JSON.stringify(message)}`);\n }\n\n async sendSMSSynchronously(message: QueueMessage<any>): Promise<any> {\n const accountSid = this.commonConfiguration.twilio.accountSid;\n const authToken = this.commonConfiguration.twilio.authToken;\n const twilioNumber = this.commonConfiguration.twilio.number;\n if (!accountSid || !authToken || !twilioNumber) {\n throw new Error(\"Missing COMMON_TWILIO_ACCOUNT_SID or COMMON_TWILIO_AUTH_TOKEN or COMMON_TWILIO_NUMBER in env.\");\n }\n\n const { to, body } = message.payload;\n\n const client = twilio(accountSid, authToken);\n try {\n const toSplit = to.split(',');\n\n const r = [];\n\n for (let i = 0; i < toSplit.length; i++) {\n const actualTo = toSplit[i];\n const twilioResponseMsg = await client.messages.create({\n body: body,\n from: twilioNumber,\n to: actualTo,\n });\n\n this.logger.debug(`Sending SMS to ${actualTo} using Twilio`);\n this.logger.debug(`Twilio response: `);\n this.logger.debug(JSON.stringify(twilioResponseMsg))\n\n r.push(twilioResponseMsg);\n }\n\n return r;\n } catch (error) {\n throw new Error(error);\n }\n }\n}"]}
|
|
@@ -28,6 +28,7 @@ export declare class SolidIntrospectService implements OnApplicationBootstrap {
|
|
|
28
28
|
private isSolidDatabaseModule;
|
|
29
29
|
private isMailProvider;
|
|
30
30
|
private isWhatsappProvider;
|
|
31
|
+
private isSmsProvider;
|
|
31
32
|
private isSecurityRuleConfigProvider;
|
|
32
33
|
private isModule;
|
|
33
34
|
getCRUDService(modelSingularName: string): CRUDService<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solid-introspect.service.d.ts","sourceRoot":"","sources":["../../src/services/solid-introspect.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAYzE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAC;AACjG,OAAO,EAAE,4BAA4B,EAAE,MAAM,kDAAkD,CAAC;AAChG,OAAO,EAAE,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;AAEpG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"solid-introspect.service.d.ts","sourceRoot":"","sources":["../../src/services/solid-introspect.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAYzE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAC;AACjG,OAAO,EAAE,4BAA4B,EAAE,MAAM,kDAAkD,CAAC;AAChG,OAAO,EAAE,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;AAEpG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,eAAO,MAAM,qBAAqB,iJAKjC,CAAC;AAEF,qBACa,sBAAuB,YAAW,sBAAsB;IAEjE,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAJT,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS;IAGvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAC5D,sBAAsB;IAwItB,+BAA+B,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsE5F,+BAA+B,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC;IAWrE,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,oCAAoC;IAU5C,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,4BAA4B;IAYpC,OAAO,CAAC,QAAQ;IAuBhB,cAAc,CAAC,iBAAiB,EAAE,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC;IAK3D,WAAW,CAAC,YAAY,EAAE,MAAM;CAGjC"}
|
|
@@ -30,6 +30,7 @@ const audit_subscriber_1 = require("../subscribers/audit.subscriber");
|
|
|
30
30
|
const computed_entity_field_subscriber_1 = require("../subscribers/computed-entity-field.subscriber");
|
|
31
31
|
const created_by_updated_by_subscriber_1 = require("../subscribers/created-by-updated-by.subscriber");
|
|
32
32
|
const soft_delete_aware_event_subscriber_1 = require("../subscribers/soft-delete-aware-event.subscriber");
|
|
33
|
+
const sms_provider_decorator_1 = require("../decorators/sms-provider.decorator");
|
|
33
34
|
exports.coreSubscriberClasses = [
|
|
34
35
|
audit_subscriber_1.AuditSubscriber,
|
|
35
36
|
computed_entity_field_subscriber_1.ComputedEntityFieldSubscriber,
|
|
@@ -121,6 +122,12 @@ let SolidIntrospectService = SolidIntrospectService_1 = class SolidIntrospectSer
|
|
|
121
122
|
whatsappProviders.forEach((whatsappProvider) => {
|
|
122
123
|
this.solidRegistry.registerWhatsappProvider(whatsappProvider);
|
|
123
124
|
});
|
|
125
|
+
const smsProviders = this.discoveryService
|
|
126
|
+
.getProviders()
|
|
127
|
+
.filter((provider) => this.isSmsProvider(provider));
|
|
128
|
+
smsProviders.forEach((smsProvider) => {
|
|
129
|
+
this.solidRegistry.registerSmsProvider(smsProvider);
|
|
130
|
+
});
|
|
124
131
|
const securityRuleConfigProviders = this.discoveryService
|
|
125
132
|
.getProviders()
|
|
126
133
|
.filter((provider) => this.isSecurityRuleConfigProvider(provider));
|
|
@@ -243,6 +250,13 @@ let SolidIntrospectService = SolidIntrospectService_1 = class SolidIntrospectSer
|
|
|
243
250
|
const isWhatsappProvider = this.reflector.get(whatsapp_provider_decorator_1.IS_WA_PROVIDER, instance.constructor);
|
|
244
251
|
return !!isWhatsappProvider;
|
|
245
252
|
}
|
|
253
|
+
isSmsProvider(provider) {
|
|
254
|
+
const { instance } = provider;
|
|
255
|
+
if (!instance)
|
|
256
|
+
return false;
|
|
257
|
+
const isSmsProvider = this.reflector.get(sms_provider_decorator_1.IS_SMS_PROVIDER, instance.constructor);
|
|
258
|
+
return !!isSmsProvider;
|
|
259
|
+
}
|
|
246
260
|
isSecurityRuleConfigProvider(provider) {
|
|
247
261
|
const { instance } = provider;
|
|
248
262
|
if (!instance)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solid-introspect.service.js","sourceRoot":"","sources":["../../src/services/solid-introspect.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { classify } from '@angular-devkit/core/src/utils/strings';\nimport { Injectable, Logger, OnApplicationBootstrap } from '@nestjs/common';\nimport { DiscoveryService, MetadataScanner, ModuleRef, Reflector } from '@nestjs/core';\nimport { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';\nimport { getDataSourceToken } from '@nestjs/typeorm';\nimport { IS_COMPUTED_FIELD_PROVIDER } from 'src/decorators/computed-field-provider.decorator';\nimport { IS_DASHBOARD_QUESTION_DATA_PROVIDER } from 'src/decorators/dashboard-question-data-provider.decorator';\nimport { IS_DASHBOARD_VARIABLE_SELECTION_PROVIDER } from 'src/decorators/dashboard-selection-provider.decorator';\nimport { IS_ERROR_CODE_PROVIDER } from 'src/decorators/error-codes-provider.decorator';\nimport { IS_MAIL_PROVIDER } from 'src/decorators/mail-provider.decorator';\nimport { IS_SCHEDULED_JOB_PROVIDER } from 'src/decorators/scheduled-job-provider.decorator';\nimport { IS_SECURITY_RULE_CONFIG_PROVIDER } from 'src/decorators/security-rule-config-provider.decorator';\nimport { IS_SELECTION_PROVIDER } from 'src/decorators/selection-provider.decorator';\nimport { IS_SOLID_DATABASE_MODULE } from 'src/decorators/solid-database-module.decorator';\nimport { IS_WA_PROVIDER } from 'src/decorators/whatsapp-provider.decorator';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { AuditSubscriber } from 'src/subscribers/audit.subscriber';\nimport { ComputedEntityFieldSubscriber } from 'src/subscribers/computed-entity-field.subscriber';\nimport { CreatedByUpdatedBySubscriber } from 'src/subscribers/created-by-updated-by.subscriber';\nimport { SoftDeleteAwareEventSubscriber } from 'src/subscribers/soft-delete-aware-event.subscriber';\nimport { DataSource } from 'typeorm';\nimport { CRUDService } from './crud.service';\n\nexport const coreSubscriberClasses = [\n AuditSubscriber,\n ComputedEntityFieldSubscriber,\n CreatedByUpdatedBySubscriber,\n SoftDeleteAwareEventSubscriber\n];\n\n@Injectable()\nexport class SolidIntrospectService implements OnApplicationBootstrap {\n constructor(\n private readonly discoveryService: DiscoveryService,\n private readonly reflector: Reflector,\n private readonly metadataScanner: MetadataScanner,\n private readonly solidRegistry: SolidRegistry,\n private readonly moduleRef: ModuleRef,\n ) { }\n\n private readonly logger = new Logger(SolidIntrospectService.name);\n async onApplicationBootstrap() {\n this.logger.debug('Introspecting the application for Solid metadata');\n\n // Register all seeders\n const seeders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isSeeder(provider));\n seeders.forEach((seeder) => {\n this.solidRegistry.registerSeeder(seeder);\n });\n\n // TODO: Scan the filesystem and populate the solid metadata\n\n // Register all IErrorCodeProvider implementations\n const errorCodeProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isErrorCodeProvider(provider));\n\n errorCodeProviders.forEach((errorCodeProvider) => {\n this.solidRegistry.registerErrorCodeProvider(errorCodeProvider);\n });\n\n // Register all ISelectionProvider implementations\n const selectionProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isSelectionProvider(provider));\n\n selectionProviders.forEach((selectionProvider) => {\n this.solidRegistry.registerSelectionProvider(selectionProvider);\n });\n\n // Register all IDashboardSelectionProvider implementations\n const dashboardVariableSelectionProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isDashboardVariableSelectionProvider(provider));\n\n dashboardVariableSelectionProviders.forEach((dashboardSelectionProvider) => {\n this.solidRegistry.registerDashboardVariableSelectionProvider(dashboardSelectionProvider);\n });\n\n // Register all IDashboardSelectionProvider implementations\n const dashboardQuestionDataProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isDashboardQuestionDataProvider(provider));\n\n dashboardQuestionDataProviders.forEach((provider) => {\n this.solidRegistry.registerDashboardQuestionDataProvider(provider);\n });\n\n // Register all IComputedProvider implementations\n const computedFieldProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isComputedFieldProvider(provider));\n\n computedFieldProviders.forEach((computedFieldProvider) => {\n // @ts-ignore\n this.solidRegistry.registerComputedFieldProvider(computedFieldProvider);\n });\n\n // Register all ISolidDatabaseModules implementations\n const solidDatabaseModules = this.discoveryService\n .getProviders()\n .filter((provider) => this.isSolidDatabaseModule(provider));\n\n solidDatabaseModules.forEach((solidDatabaseModule) => {\n this.solidRegistry.registerSolidDatabaseModule(solidDatabaseModule);\n });\n\n // keep track of all the controllers & respective methods. \n const allControllers = this.discoveryService\n .getControllers()\n .map((controller) => {\n const { instance } = controller;\n return {\n name: controller.name,\n methods: this.metadataScanner.getAllMethodNames(Object.getPrototypeOf(instance))\n };\n });\n\n this.solidRegistry.registerControllers(new Set(allControllers));\n\n // Register all modules\n const allModules = this.discoveryService\n .getProviders()\n .filter((provider) => this.isModule(provider));\n this.solidRegistry.registerModules(allModules);\n\n // Register all IScheduledJob implementations\n const scheduledJobProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isScheduledJobProvider(provider));\n\n scheduledJobProviders.forEach((scheduledJobProvider) => {\n this.solidRegistry.registerScheduledJobProvider(scheduledJobProvider);\n });\n\n // Register all IMail implementations\n const mailProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isMailProvider(provider));\n\n mailProviders.forEach((mailProvider) => {\n this.solidRegistry.registerMailProvider(mailProvider);\n });\n\n // Register all IWhatsappTransport implementations\n const whatsappProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isWhatsappProvider(provider));\n\n whatsappProviders.forEach((whatsappProvider) => {\n this.solidRegistry.registerWhatsappProvider(whatsappProvider);\n });\n\n // Register all ISecurityRuleConfigProvider implementations\n const securityRuleConfigProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isSecurityRuleConfigProvider(provider));\n\n securityRuleConfigProviders.forEach((securityRuleConfigProvider) => {\n this.solidRegistry.registerSecurityRuleConfigProvider(securityRuleConfigProvider);\n });\n\n // Register the core subscribers against all the configured database modules / datasources\n await this.bootstrapCoreTypeOrmSubscribers(solidDatabaseModules)\n }\n\n async bootstrapCoreTypeOrmSubscribers(dbModules: Array<InstanceWrapper<any>>): Promise<void> {\n // Register core subscribers for each Solid database module\n for (const wrapper of dbModules) {\n // Get the Database Module instance\n const instance = (wrapper as InstanceWrapper).instance as any;\n if (!instance || typeof instance.name !== 'function') {\n this.logger.warn('Skipping a solid DB module wrapper with no instance or name() method');\n continue;\n }\n\n // Get the DataSource for this module\n const dsName: string | undefined = instance.name();\n // getDataSourceToken() without name = default; pass dsName if non-default\n const token = dsName ? getDataSourceToken(dsName) : getDataSourceToken();\n let ds: DataSource | undefined;\n try {\n ds = this.moduleRef.get<DataSource>(token, { strict: false });\n } catch (err) {\n this.logger.warn(`DataSource token for \"${dsName ?? 'default'}\" not found: ${err?.message ?? err}`);\n }\n if (!ds) {\n this.logger.warn(`No DataSource found for module \"${dsName}\". Skipping subscriber registration.`);\n continue;\n }\n\n // Ensure DataSource is initialized (optional)\n if (!ds.isInitialized) {\n try {\n await ds.initialize(); // only if you need to initialize here; in many apps datasources are created earlier\n } catch (err) {\n this.logger.error(`Failed to initialize DataSource \"${dsName}\": ${err}`);\n continue;\n }\n }\n\n // Register each subscriber class for this DataSource\n // const auditSubscriberInstance = new AuditSubscriber(this.chatterMessageService, this.modelMetadataRepo, this.modelMetadataHelperService);\n // auditSubscriberInstance.bindToDataSource(ds);\n\n // const computedEntityFieldSubscriberInstance = new ComputedEntityFieldSubscriber(this.solidRegistry, this.publisherFactory);\n // computedEntityFieldSubscriberInstance.bindToDataSource(ds);\n\n // const createdByUpdatedBySubscriberInstance = new CreatedByUpdatedBySubscriber(this.requestContextService);\n // createdByUpdatedBySubscriberInstance.bindToDataSource(ds);\n\n // const softDeleteAwareEventSubscriberInstance = new SoftDeleteAwareEventSubscriber();\n // softDeleteAwareEventSubscriberInstance.bindToDataSource(ds);\n for (const SubClass of coreSubscriberClasses) {\n const alreadyRegistered = ds.subscribers.some(\n (s) => (s as any).constructor?.name === SubClass.name,\n );\n if (alreadyRegistered) {\n this.logger.debug(`Subscriber ${SubClass.name} already registered on datasource ${dsName ?? 'default'}`);\n continue;\n }\n\n // Resolve subscriber from NestJS moduleRef to ensure dependencies are injected\n const subscriberInstance = await this.moduleRef.resolve(SubClass, undefined, { strict: false });\n subscriberInstance.bindToDataSource(ds);\n\n // instantiate subscriber bound to this DataSource\n // NOTE: constructor signature must be (dataSource: DataSource, requestContextService: RequestContextService, ...)\n // const subscriberInstance = new (SubClass as any)(ds, this.requestContextService);\n\n // ds.subscribers.push(subscriberInstance);\n // this.logger.log(`Registered subscriber ${SubClass.name} on datasource ${dsName ?? 'default'}`);\n }\n }\n }\n\n isDashboardQuestionDataProvider(providerWrapper: InstanceWrapper<any>) {\n const { instance } = providerWrapper;\n if (!instance) return false;\n const provider = this.reflector.get<boolean>(\n IS_DASHBOARD_QUESTION_DATA_PROVIDER,\n instance.constructor,\n );\n return !!provider;\n }\n\n // This method identifies a provider as a seeder if it has a seed method i.e duck typing\n private isSeeder(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const seedMethod = this.metadataScanner\n .getAllMethodNames(Object.getPrototypeOf(instance))\n .find((methodName) => methodName === 'seed');\n if (!seedMethod) return false;\n return true;\n }\n\n private isErrorCodeProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isErrorCodeProvider = this.reflector.get<boolean>(\n IS_ERROR_CODE_PROVIDER,\n instance.constructor,\n );\n\n return !!isErrorCodeProvider;\n }\n\n private isSelectionProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSelectionProvider = this.reflector.get<boolean>(\n IS_SELECTION_PROVIDER,\n instance.constructor,\n );\n\n return !!isSelectionProvider;\n }\n\n private isDashboardVariableSelectionProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n const isDashboardSelectionProvider = this.reflector.get<boolean>(\n IS_DASHBOARD_VARIABLE_SELECTION_PROVIDER,\n instance.constructor,\n );\n return !!isDashboardSelectionProvider;\n }\n\n private isComputedFieldProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isComputedFieldProvider = this.reflector.get<boolean>(\n IS_COMPUTED_FIELD_PROVIDER,\n instance.constructor,\n );\n\n return !!isComputedFieldProvider;\n }\n\n private isScheduledJobProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isScheduledJobProvider = this.reflector.get<boolean>(\n IS_SCHEDULED_JOB_PROVIDER,\n instance.constructor,\n );\n\n return !!isScheduledJobProvider;\n }\n\n private isSolidDatabaseModule(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSolidDatabaseModule = this.reflector.get<boolean>(\n IS_SOLID_DATABASE_MODULE,\n instance.constructor,\n );\n\n return !!isSolidDatabaseModule;\n }\n\n private isMailProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isMailProvider = this.reflector.get<boolean>(\n IS_MAIL_PROVIDER,\n instance.constructor,\n );\n\n return !!isMailProvider;\n }\n\n private isWhatsappProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isWhatsappProvider = this.reflector.get<boolean>(\n IS_WA_PROVIDER,\n instance.constructor,\n );\n\n return !!isWhatsappProvider;\n }\n\n private isSecurityRuleConfigProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSecurityRuleConfigProvider = this.reflector.get<boolean>(\n IS_SECURITY_RULE_CONFIG_PROVIDER,\n instance.constructor,\n );\n\n return !!isSecurityRuleConfigProvider;\n }\n\n private isModule(provider: InstanceWrapper): boolean {\n const metatype = provider.metatype;\n // Check if it's a Static Module (Class-Based)\n if (metatype && typeof metatype === 'function' && Reflect.getMetadata('imports', metatype)) {\n return true;\n }\n\n // Ensure provider.instance is an object before checking for 'module'\n if (provider.instance && typeof provider.instance === 'object') {\n // Check if it's a Dynamic Module (Object-Based)\n if ('module' in provider.instance && typeof provider.instance.module === 'function') {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Given a model singular name this will return the crud service instance.\n * @param modelSingularName \n * @returns \n */\n getCRUDService(modelSingularName: string): CRUDService<any> {\n const provider = this.getProvider(`${classify(modelSingularName)}Service`);\n return provider?.instance as CRUDService<any>;\n }\n\n getProvider(providerName: string) {\n return this.discoveryService.getProviders().find((provider) => provider.name === providerName);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"solid-introspect.service.js","sourceRoot":"","sources":["../../src/services/solid-introspect.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { classify } from '@angular-devkit/core/src/utils/strings';\nimport { Injectable, Logger, OnApplicationBootstrap } from '@nestjs/common';\nimport { DiscoveryService, MetadataScanner, ModuleRef, Reflector } from '@nestjs/core';\nimport { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';\nimport { getDataSourceToken } from '@nestjs/typeorm';\nimport { IS_COMPUTED_FIELD_PROVIDER } from 'src/decorators/computed-field-provider.decorator';\nimport { IS_DASHBOARD_QUESTION_DATA_PROVIDER } from 'src/decorators/dashboard-question-data-provider.decorator';\nimport { IS_DASHBOARD_VARIABLE_SELECTION_PROVIDER } from 'src/decorators/dashboard-selection-provider.decorator';\nimport { IS_ERROR_CODE_PROVIDER } from 'src/decorators/error-codes-provider.decorator';\nimport { IS_MAIL_PROVIDER } from 'src/decorators/mail-provider.decorator';\nimport { IS_SCHEDULED_JOB_PROVIDER } from 'src/decorators/scheduled-job-provider.decorator';\nimport { IS_SECURITY_RULE_CONFIG_PROVIDER } from 'src/decorators/security-rule-config-provider.decorator';\nimport { IS_SELECTION_PROVIDER } from 'src/decorators/selection-provider.decorator';\nimport { IS_SOLID_DATABASE_MODULE } from 'src/decorators/solid-database-module.decorator';\nimport { IS_WA_PROVIDER } from 'src/decorators/whatsapp-provider.decorator';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { AuditSubscriber } from 'src/subscribers/audit.subscriber';\nimport { ComputedEntityFieldSubscriber } from 'src/subscribers/computed-entity-field.subscriber';\nimport { CreatedByUpdatedBySubscriber } from 'src/subscribers/created-by-updated-by.subscriber';\nimport { SoftDeleteAwareEventSubscriber } from 'src/subscribers/soft-delete-aware-event.subscriber';\nimport { DataSource } from 'typeorm';\nimport { CRUDService } from './crud.service';\nimport { IS_SMS_PROVIDER } from 'src/decorators/sms-provider.decorator';\n\nexport const coreSubscriberClasses = [\n AuditSubscriber,\n ComputedEntityFieldSubscriber,\n CreatedByUpdatedBySubscriber,\n SoftDeleteAwareEventSubscriber\n];\n\n@Injectable()\nexport class SolidIntrospectService implements OnApplicationBootstrap {\n constructor(\n private readonly discoveryService: DiscoveryService,\n private readonly reflector: Reflector,\n private readonly metadataScanner: MetadataScanner,\n private readonly solidRegistry: SolidRegistry,\n private readonly moduleRef: ModuleRef,\n ) { }\n\n private readonly logger = new Logger(SolidIntrospectService.name);\n async onApplicationBootstrap() {\n this.logger.debug('Introspecting the application for Solid metadata');\n\n // Register all seeders\n const seeders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isSeeder(provider));\n seeders.forEach((seeder) => {\n this.solidRegistry.registerSeeder(seeder);\n });\n\n // TODO: Scan the filesystem and populate the solid metadata\n\n // Register all IErrorCodeProvider implementations\n const errorCodeProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isErrorCodeProvider(provider));\n\n errorCodeProviders.forEach((errorCodeProvider) => {\n this.solidRegistry.registerErrorCodeProvider(errorCodeProvider);\n });\n\n // Register all ISelectionProvider implementations\n const selectionProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isSelectionProvider(provider));\n\n selectionProviders.forEach((selectionProvider) => {\n this.solidRegistry.registerSelectionProvider(selectionProvider);\n });\n\n // Register all IDashboardSelectionProvider implementations\n const dashboardVariableSelectionProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isDashboardVariableSelectionProvider(provider));\n\n dashboardVariableSelectionProviders.forEach((dashboardSelectionProvider) => {\n this.solidRegistry.registerDashboardVariableSelectionProvider(dashboardSelectionProvider);\n });\n\n // Register all IDashboardSelectionProvider implementations\n const dashboardQuestionDataProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isDashboardQuestionDataProvider(provider));\n\n dashboardQuestionDataProviders.forEach((provider) => {\n this.solidRegistry.registerDashboardQuestionDataProvider(provider);\n });\n\n // Register all IComputedProvider implementations\n const computedFieldProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isComputedFieldProvider(provider));\n\n computedFieldProviders.forEach((computedFieldProvider) => {\n // @ts-ignore\n this.solidRegistry.registerComputedFieldProvider(computedFieldProvider);\n });\n\n // Register all ISolidDatabaseModules implementations\n const solidDatabaseModules = this.discoveryService\n .getProviders()\n .filter((provider) => this.isSolidDatabaseModule(provider));\n\n solidDatabaseModules.forEach((solidDatabaseModule) => {\n this.solidRegistry.registerSolidDatabaseModule(solidDatabaseModule);\n });\n\n // keep track of all the controllers & respective methods. \n const allControllers = this.discoveryService\n .getControllers()\n .map((controller) => {\n const { instance } = controller;\n return {\n name: controller.name,\n methods: this.metadataScanner.getAllMethodNames(Object.getPrototypeOf(instance))\n };\n });\n\n this.solidRegistry.registerControllers(new Set(allControllers));\n\n // Register all modules\n const allModules = this.discoveryService\n .getProviders()\n .filter((provider) => this.isModule(provider));\n this.solidRegistry.registerModules(allModules);\n\n // Register all IScheduledJob implementations\n const scheduledJobProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isScheduledJobProvider(provider));\n\n scheduledJobProviders.forEach((scheduledJobProvider) => {\n this.solidRegistry.registerScheduledJobProvider(scheduledJobProvider);\n });\n\n // Register all IMail implementations\n const mailProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isMailProvider(provider));\n\n mailProviders.forEach((mailProvider) => {\n this.solidRegistry.registerMailProvider(mailProvider);\n });\n\n // Register all IWhatsappTransport implementations\n const whatsappProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isWhatsappProvider(provider));\n\n whatsappProviders.forEach((whatsappProvider) => {\n this.solidRegistry.registerWhatsappProvider(whatsappProvider);\n });\n\n // Register all IWhatsappTransport implementations\n const smsProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isSmsProvider(provider));\n\n smsProviders.forEach((smsProvider) => {\n this.solidRegistry.registerSmsProvider(smsProvider);\n });\n\n // Register all ISecurityRuleConfigProvider implementations\n const securityRuleConfigProviders = this.discoveryService\n .getProviders()\n .filter((provider) => this.isSecurityRuleConfigProvider(provider));\n\n securityRuleConfigProviders.forEach((securityRuleConfigProvider) => {\n this.solidRegistry.registerSecurityRuleConfigProvider(securityRuleConfigProvider);\n });\n\n // Register the core subscribers against all the configured database modules / datasources\n await this.bootstrapCoreTypeOrmSubscribers(solidDatabaseModules)\n }\n\n async bootstrapCoreTypeOrmSubscribers(dbModules: Array<InstanceWrapper<any>>): Promise<void> {\n // Register core subscribers for each Solid database module\n for (const wrapper of dbModules) {\n // Get the Database Module instance\n const instance = (wrapper as InstanceWrapper).instance as any;\n if (!instance || typeof instance.name !== 'function') {\n this.logger.warn('Skipping a solid DB module wrapper with no instance or name() method');\n continue;\n }\n\n // Get the DataSource for this module\n const dsName: string | undefined = instance.name();\n // getDataSourceToken() without name = default; pass dsName if non-default\n const token = dsName ? getDataSourceToken(dsName) : getDataSourceToken();\n let ds: DataSource | undefined;\n try {\n ds = this.moduleRef.get<DataSource>(token, { strict: false });\n } catch (err) {\n this.logger.warn(`DataSource token for \"${dsName ?? 'default'}\" not found: ${err?.message ?? err}`);\n }\n if (!ds) {\n this.logger.warn(`No DataSource found for module \"${dsName}\". Skipping subscriber registration.`);\n continue;\n }\n\n // Ensure DataSource is initialized (optional)\n if (!ds.isInitialized) {\n try {\n await ds.initialize(); // only if you need to initialize here; in many apps datasources are created earlier\n } catch (err) {\n this.logger.error(`Failed to initialize DataSource \"${dsName}\": ${err}`);\n continue;\n }\n }\n\n // Register each subscriber class for this DataSource\n // const auditSubscriberInstance = new AuditSubscriber(this.chatterMessageService, this.modelMetadataRepo, this.modelMetadataHelperService);\n // auditSubscriberInstance.bindToDataSource(ds);\n\n // const computedEntityFieldSubscriberInstance = new ComputedEntityFieldSubscriber(this.solidRegistry, this.publisherFactory);\n // computedEntityFieldSubscriberInstance.bindToDataSource(ds);\n\n // const createdByUpdatedBySubscriberInstance = new CreatedByUpdatedBySubscriber(this.requestContextService);\n // createdByUpdatedBySubscriberInstance.bindToDataSource(ds);\n\n // const softDeleteAwareEventSubscriberInstance = new SoftDeleteAwareEventSubscriber();\n // softDeleteAwareEventSubscriberInstance.bindToDataSource(ds);\n for (const SubClass of coreSubscriberClasses) {\n const alreadyRegistered = ds.subscribers.some(\n (s) => (s as any).constructor?.name === SubClass.name,\n );\n if (alreadyRegistered) {\n this.logger.debug(`Subscriber ${SubClass.name} already registered on datasource ${dsName ?? 'default'}`);\n continue;\n }\n\n // Resolve subscriber from NestJS moduleRef to ensure dependencies are injected\n const subscriberInstance = await this.moduleRef.resolve(SubClass, undefined, { strict: false });\n subscriberInstance.bindToDataSource(ds);\n\n // instantiate subscriber bound to this DataSource\n // NOTE: constructor signature must be (dataSource: DataSource, requestContextService: RequestContextService, ...)\n // const subscriberInstance = new (SubClass as any)(ds, this.requestContextService);\n\n // ds.subscribers.push(subscriberInstance);\n // this.logger.log(`Registered subscriber ${SubClass.name} on datasource ${dsName ?? 'default'}`);\n }\n }\n }\n\n isDashboardQuestionDataProvider(providerWrapper: InstanceWrapper<any>) {\n const { instance } = providerWrapper;\n if (!instance) return false;\n const provider = this.reflector.get<boolean>(\n IS_DASHBOARD_QUESTION_DATA_PROVIDER,\n instance.constructor,\n );\n return !!provider;\n }\n\n // This method identifies a provider as a seeder if it has a seed method i.e duck typing\n private isSeeder(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const seedMethod = this.metadataScanner\n .getAllMethodNames(Object.getPrototypeOf(instance))\n .find((methodName) => methodName === 'seed');\n if (!seedMethod) return false;\n return true;\n }\n\n private isErrorCodeProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isErrorCodeProvider = this.reflector.get<boolean>(\n IS_ERROR_CODE_PROVIDER,\n instance.constructor,\n );\n\n return !!isErrorCodeProvider;\n }\n\n private isSelectionProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSelectionProvider = this.reflector.get<boolean>(\n IS_SELECTION_PROVIDER,\n instance.constructor,\n );\n\n return !!isSelectionProvider;\n }\n\n private isDashboardVariableSelectionProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n const isDashboardSelectionProvider = this.reflector.get<boolean>(\n IS_DASHBOARD_VARIABLE_SELECTION_PROVIDER,\n instance.constructor,\n );\n return !!isDashboardSelectionProvider;\n }\n\n private isComputedFieldProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isComputedFieldProvider = this.reflector.get<boolean>(\n IS_COMPUTED_FIELD_PROVIDER,\n instance.constructor,\n );\n\n return !!isComputedFieldProvider;\n }\n\n private isScheduledJobProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isScheduledJobProvider = this.reflector.get<boolean>(\n IS_SCHEDULED_JOB_PROVIDER,\n instance.constructor,\n );\n\n return !!isScheduledJobProvider;\n }\n\n private isSolidDatabaseModule(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSolidDatabaseModule = this.reflector.get<boolean>(\n IS_SOLID_DATABASE_MODULE,\n instance.constructor,\n );\n\n return !!isSolidDatabaseModule;\n }\n\n private isMailProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isMailProvider = this.reflector.get<boolean>(\n IS_MAIL_PROVIDER,\n instance.constructor,\n );\n\n return !!isMailProvider;\n }\n\n private isWhatsappProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isWhatsappProvider = this.reflector.get<boolean>(\n IS_WA_PROVIDER,\n instance.constructor,\n );\n\n return !!isWhatsappProvider;\n }\n\n private isSmsProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSmsProvider = this.reflector.get<boolean>(\n IS_SMS_PROVIDER,\n instance.constructor,\n );\n\n return !!isSmsProvider;\n }\n\n private isSecurityRuleConfigProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSecurityRuleConfigProvider = this.reflector.get<boolean>(\n IS_SECURITY_RULE_CONFIG_PROVIDER,\n instance.constructor,\n );\n\n return !!isSecurityRuleConfigProvider;\n }\n\n private isModule(provider: InstanceWrapper): boolean {\n const metatype = provider.metatype;\n // Check if it's a Static Module (Class-Based)\n if (metatype && typeof metatype === 'function' && Reflect.getMetadata('imports', metatype)) {\n return true;\n }\n\n // Ensure provider.instance is an object before checking for 'module'\n if (provider.instance && typeof provider.instance === 'object') {\n // Check if it's a Dynamic Module (Object-Based)\n if ('module' in provider.instance && typeof provider.instance.module === 'function') {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Given a model singular name this will return the crud service instance.\n * @param modelSingularName \n * @returns \n */\n getCRUDService(modelSingularName: string): CRUDService<any> {\n const provider = this.getProvider(`${classify(modelSingularName)}Service`);\n return provider?.instance as CRUDService<any>;\n }\n\n getProvider(providerName: string) {\n return this.discoveryService.getProviders().find((provider) => provider.name === providerName);\n }\n}\n"]}
|
|
@@ -12,6 +12,7 @@ import { ActiveUserData } from '../interfaces/active-user-data.interface';
|
|
|
12
12
|
import { iamConfig } from 'src/config/iam.config';
|
|
13
13
|
import { UserRepository } from 'src/repository/user.repository';
|
|
14
14
|
import { RoleMetadataRepository } from 'src/repository/role-metadata.repository';
|
|
15
|
+
import { HashingService } from './hashing.service';
|
|
15
16
|
export declare class UserService extends CRUDService<User> {
|
|
16
17
|
readonly modelMetadataService: ModelMetadataService;
|
|
17
18
|
readonly moduleMetadataService: ModuleMetadataService;
|
|
@@ -19,13 +20,14 @@ export declare class UserService extends CRUDService<User> {
|
|
|
19
20
|
readonly fileService: FileService;
|
|
20
21
|
readonly discoveryService: DiscoveryService;
|
|
21
22
|
readonly crudHelperService: CrudHelperService;
|
|
23
|
+
readonly hashingService: HashingService;
|
|
22
24
|
readonly entityManager: EntityManager;
|
|
23
25
|
readonly repo: UserRepository;
|
|
24
26
|
readonly nonSecurityRuleAwareRepo: Repository<User>;
|
|
25
27
|
private readonly roleRepository;
|
|
26
28
|
readonly moduleRef: ModuleRef;
|
|
27
29
|
private readonly iamConfiguration;
|
|
28
|
-
constructor(modelMetadataService: ModelMetadataService, moduleMetadataService: ModuleMetadataService, configService: ConfigService, fileService: FileService, discoveryService: DiscoveryService, crudHelperService: CrudHelperService, entityManager: EntityManager, repo: UserRepository, nonSecurityRuleAwareRepo: Repository<User>, roleRepository: RoleMetadataRepository, moduleRef: ModuleRef, iamConfiguration: ConfigType<typeof iamConfig>);
|
|
30
|
+
constructor(modelMetadataService: ModelMetadataService, moduleMetadataService: ModuleMetadataService, configService: ConfigService, fileService: FileService, discoveryService: DiscoveryService, crudHelperService: CrudHelperService, hashingService: HashingService, entityManager: EntityManager, repo: UserRepository, nonSecurityRuleAwareRepo: Repository<User>, roleRepository: RoleMetadataRepository, moduleRef: ModuleRef, iamConfiguration: ConfigType<typeof iamConfig>);
|
|
29
31
|
delete(id: number, solidRequestContext?: any): Promise<User>;
|
|
30
32
|
deleteMany(ids: number[], solidRequestContext?: any): Promise<any>;
|
|
31
33
|
findOneByEmail(email: string): Promise<User>;
|
|
@@ -39,5 +41,10 @@ export declare class UserService extends CRUDService<User> {
|
|
|
39
41
|
findUsersByRole(roleName: string, relations?: any): Promise<User[]>;
|
|
40
42
|
checkIfPermissionExists(query: any, activeUser: ActiveUserData): Promise<string[]>;
|
|
41
43
|
initializeRolesForNewUser(roles: string[], user: User): Promise<void>;
|
|
44
|
+
hashPassword(password: string): Promise<{
|
|
45
|
+
password: string;
|
|
46
|
+
passwordScheme: string;
|
|
47
|
+
passwordSchemeVersion: number;
|
|
48
|
+
}>;
|
|
42
49
|
}
|
|
43
50
|
//# sourceMappingURL=user.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../src/services/user.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../src/services/user.service.ts"],"names":[],"mappings":"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"}
|