@solidstarters/solid-core 1.2.204 → 1.2.207
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/commands/info.command.d.ts +19 -0
- package/dist/commands/info.command.d.ts.map +1 -0
- package/dist/commands/info.command.js +98 -0
- package/dist/commands/info.command.js.map +1 -0
- package/dist/commands/mcp.command.d.ts.map +1 -1
- package/dist/commands/mcp.command.js +2 -10
- package/dist/commands/mcp.command.js.map +1 -1
- package/dist/commands/seed.command.d.ts.map +1 -1
- package/dist/commands/seed.command.js +3 -12
- package/dist/commands/seed.command.js.map +1 -1
- package/dist/controllers/email-template.controller.d.ts +3 -1
- package/dist/controllers/email-template.controller.d.ts.map +1 -1
- package/dist/controllers/email-template.controller.js +7 -4
- package/dist/controllers/email-template.controller.js.map +1 -1
- package/dist/controllers/google-authentication.controller.d.ts +4 -5
- package/dist/controllers/google-authentication.controller.d.ts.map +1 -1
- package/dist/controllers/google-authentication.controller.js +21 -14
- package/dist/controllers/google-authentication.controller.js.map +1 -1
- package/dist/controllers/otp-authentication.controller.d.ts +10 -0
- package/dist/controllers/otp-authentication.controller.d.ts.map +1 -1
- package/dist/controllers/otp-authentication.controller.js +1 -1
- package/dist/controllers/setting.controller.d.ts +2 -34
- package/dist/controllers/setting.controller.d.ts.map +1 -1
- package/dist/controllers/setting.controller.js +4 -130
- package/dist/controllers/setting.controller.js.map +1 -1
- package/dist/controllers/test.controller.d.ts.map +1 -1
- package/dist/controllers/test.controller.js.map +1 -1
- package/dist/decorators/settings-provider.decorator.d.ts +3 -0
- package/dist/decorators/settings-provider.decorator.d.ts.map +1 -0
- package/dist/decorators/settings-provider.decorator.js +8 -0
- package/dist/decorators/settings-provider.decorator.js.map +1 -0
- package/dist/decorators/solid-password.decorator.d.ts.map +1 -1
- package/dist/decorators/solid-password.decorator.js +3 -3
- package/dist/decorators/solid-password.decorator.js.map +1 -1
- package/dist/dtos/create-role-metadata.dto.d.ts +3 -4
- package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-role-metadata.dto.js +4 -51
- package/dist/dtos/create-role-metadata.dto.js.map +1 -1
- package/dist/dtos/create-scheduled-job.dto.d.ts +1 -0
- package/dist/dtos/create-scheduled-job.dto.d.ts.map +1 -1
- package/dist/dtos/create-scheduled-job.dto.js +7 -1
- package/dist/dtos/create-scheduled-job.dto.js.map +1 -1
- package/dist/dtos/create-setting.dto.d.ts +3 -0
- package/dist/dtos/create-setting.dto.d.ts.map +1 -1
- package/dist/dtos/create-setting.dto.js +20 -2
- package/dist/dtos/create-setting.dto.js.map +1 -1
- package/dist/dtos/update-scheduled-job.dto.d.ts +1 -0
- package/dist/dtos/update-scheduled-job.dto.d.ts.map +1 -1
- package/dist/dtos/update-scheduled-job.dto.js +7 -1
- package/dist/dtos/update-scheduled-job.dto.js.map +1 -1
- package/dist/dtos/update-setting.dto.d.ts +3 -0
- package/dist/dtos/update-setting.dto.d.ts.map +1 -1
- package/dist/dtos/update-setting.dto.js +19 -1
- package/dist/dtos/update-setting.dto.js.map +1 -1
- package/dist/entities/scheduled-job.entity.d.ts +1 -0
- package/dist/entities/scheduled-job.entity.d.ts.map +1 -1
- package/dist/entities/scheduled-job.entity.js +5 -1
- package/dist/entities/scheduled-job.entity.js.map +1 -1
- package/dist/entities/setting.entity.d.ts +3 -0
- package/dist/entities/setting.entity.d.ts.map +1 -1
- package/dist/entities/setting.entity.js +13 -1
- package/dist/entities/setting.entity.js.map +1 -1
- package/dist/factories/mail.factory.d.ts +3 -4
- package/dist/factories/mail.factory.d.ts.map +1 -1
- package/dist/factories/mail.factory.js +6 -12
- package/dist/factories/mail.factory.js.map +1 -1
- package/dist/factories/sms.factory.d.ts +3 -4
- package/dist/factories/sms.factory.d.ts.map +1 -1
- package/dist/factories/sms.factory.js +6 -12
- package/dist/factories/sms.factory.js.map +1 -1
- package/dist/factories/whatsapp.factory.d.ts +3 -4
- package/dist/factories/whatsapp.factory.d.ts.map +1 -1
- package/dist/factories/whatsapp.factory.js +6 -12
- package/dist/factories/whatsapp.factory.js.map +1 -1
- package/dist/guards/access-token.guard.d.ts +3 -4
- package/dist/guards/access-token.guard.d.ts.map +1 -1
- package/dist/guards/access-token.guard.js +14 -9
- package/dist/guards/access-token.guard.js.map +1 -1
- package/dist/helpers/command.service.d.ts +5 -1
- package/dist/helpers/command.service.d.ts.map +1 -1
- package/dist/helpers/command.service.js +26 -11
- package/dist/helpers/command.service.js.map +1 -1
- package/dist/helpers/cors.helper.d.ts +1 -2
- package/dist/helpers/cors.helper.d.ts.map +1 -1
- package/dist/helpers/cors.helper.js +2 -2
- package/dist/helpers/cors.helper.js.map +1 -1
- package/dist/helpers/error-mapper.service.d.ts.map +1 -1
- package/dist/helpers/error-mapper.service.js.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js +2 -2
- package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js.map +1 -1
- package/dist/helpers/google-oauth.helper.d.ts +7 -3
- package/dist/helpers/google-oauth.helper.d.ts.map +1 -1
- package/dist/helpers/google-oauth.helper.js +1 -2
- package/dist/helpers/google-oauth.helper.js.map +1 -1
- package/dist/helpers/module.helper.js +0 -2
- package/dist/helpers/module.helper.js.map +1 -1
- package/dist/helpers/schematic.service.d.ts +3 -2
- package/dist/helpers/schematic.service.d.ts.map +1 -1
- package/dist/helpers/schematic.service.js +32 -27
- package/dist/helpers/schematic.service.js.map +1 -1
- package/dist/helpers/solid-registry.d.ts +8 -3
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +32 -9
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/index.d.ts +2 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -6
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +21 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js +8 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/passport-strategies/google-oauth.strategy.d.ts +1 -4
- package/dist/passport-strategies/google-oauth.strategy.d.ts.map +1 -1
- package/dist/passport-strategies/google-oauth.strategy.js +12 -12
- package/dist/passport-strategies/google-oauth.strategy.js.map +1 -1
- package/dist/repository/scheduled-job.repository.d.ts.map +1 -1
- package/dist/repository/scheduled-job.repository.js +1 -0
- package/dist/repository/scheduled-job.repository.js.map +1 -1
- package/dist/seeders/email-template-seeder.service.d.ts +3 -4
- package/dist/seeders/email-template-seeder.service.d.ts.map +1 -1
- package/dist/seeders/email-template-seeder.service.js +7 -12
- package/dist/seeders/email-template-seeder.service.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts +1 -5
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +24 -24
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +119 -5
- package/dist/seeders/sms-template-seeder.service.d.ts +3 -4
- package/dist/seeders/sms-template-seeder.service.d.ts.map +1 -1
- package/dist/seeders/sms-template-seeder.service.js +7 -12
- package/dist/seeders/sms-template-seeder.service.js.map +1 -1
- package/dist/seeders/system-fields-seeder.service.d.ts.map +1 -1
- package/dist/seeders/system-fields-seeder.service.js +3 -0
- package/dist/seeders/system-fields-seeder.service.js.map +1 -1
- package/dist/services/action-metadata.service.d.ts +2 -13
- package/dist/services/action-metadata.service.d.ts.map +1 -1
- package/dist/services/action-metadata.service.js +4 -22
- package/dist/services/action-metadata.service.js.map +1 -1
- package/dist/services/ai-interaction.service.d.ts +2 -13
- package/dist/services/ai-interaction.service.d.ts.map +1 -1
- package/dist/services/ai-interaction.service.js +6 -24
- package/dist/services/ai-interaction.service.js.map +1 -1
- package/dist/services/authentication.service.d.ts +14 -10
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +158 -116
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/bcrypt.service.d.ts +3 -5
- package/dist/services/bcrypt.service.d.ts.map +1 -1
- package/dist/services/bcrypt.service.js +10 -14
- package/dist/services/bcrypt.service.js.map +1 -1
- package/dist/services/chatter-message-details.service.d.ts +2 -13
- package/dist/services/chatter-message-details.service.d.ts.map +1 -1
- package/dist/services/chatter-message-details.service.js +4 -22
- package/dist/services/chatter-message-details.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts +2 -13
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +5 -23
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/crud.service.d.ts +12 -12
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +25 -17
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/dashboard-question-sql-dataset-config.service.d.ts +2 -13
- package/dist/services/dashboard-question-sql-dataset-config.service.d.ts.map +1 -1
- package/dist/services/dashboard-question-sql-dataset-config.service.js +4 -21
- package/dist/services/dashboard-question-sql-dataset-config.service.js.map +1 -1
- package/dist/services/dashboard-question.service.d.ts +2 -13
- package/dist/services/dashboard-question.service.d.ts.map +1 -1
- package/dist/services/dashboard-question.service.js +4 -21
- package/dist/services/dashboard-question.service.js.map +1 -1
- package/dist/services/dashboard-variable.service.d.ts +2 -13
- package/dist/services/dashboard-variable.service.d.ts.map +1 -1
- package/dist/services/dashboard-variable.service.js +4 -21
- package/dist/services/dashboard-variable.service.js.map +1 -1
- package/dist/services/dashboard.service.d.ts +2 -13
- package/dist/services/dashboard.service.d.ts.map +1 -1
- package/dist/services/dashboard.service.js +4 -21
- package/dist/services/dashboard.service.js.map +1 -1
- package/dist/services/email-template.service.d.ts +2 -13
- package/dist/services/email-template.service.d.ts.map +1 -1
- package/dist/services/email-template.service.js +4 -22
- package/dist/services/email-template.service.js.map +1 -1
- package/dist/services/export-template.service.d.ts +2 -13
- package/dist/services/export-template.service.d.ts.map +1 -1
- package/dist/services/export-template.service.js +4 -21
- package/dist/services/export-template.service.js.map +1 -1
- package/dist/services/export-transaction.service.d.ts +2 -13
- package/dist/services/export-transaction.service.d.ts.map +1 -1
- package/dist/services/export-transaction.service.js +4 -21
- package/dist/services/export-transaction.service.js.map +1 -1
- package/dist/services/field-metadata.service.d.ts +11 -0
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js +3 -0
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/file.service.d.ts +1 -4
- package/dist/services/file.service.d.ts.map +1 -1
- package/dist/services/file.service.js +12 -13
- package/dist/services/file.service.js.map +1 -1
- package/dist/services/genai/r2r-helper.service.d.ts +3 -1
- package/dist/services/genai/r2r-helper.service.d.ts.map +1 -1
- package/dist/services/genai/r2r-helper.service.js +11 -7
- package/dist/services/genai/r2r-helper.service.js.map +1 -1
- package/dist/services/import-transaction-error-log.service.d.ts +2 -13
- package/dist/services/import-transaction-error-log.service.d.ts.map +1 -1
- package/dist/services/import-transaction-error-log.service.js +4 -22
- package/dist/services/import-transaction-error-log.service.js.map +1 -1
- package/dist/services/import-transaction.service.d.ts +2 -13
- package/dist/services/import-transaction.service.d.ts.map +1 -1
- package/dist/services/import-transaction.service.js +4 -22
- package/dist/services/import-transaction.service.js.map +1 -1
- package/dist/services/list-of-values.service.d.ts +2 -13
- package/dist/services/list-of-values.service.d.ts.map +1 -1
- package/dist/services/list-of-values.service.js +4 -22
- package/dist/services/list-of-values.service.js.map +1 -1
- package/dist/services/locale.service.d.ts +2 -13
- package/dist/services/locale.service.d.ts.map +1 -1
- package/dist/services/locale.service.js +4 -22
- package/dist/services/locale.service.js.map +1 -1
- package/dist/services/mail/elastic-email.service.d.ts +4 -5
- package/dist/services/mail/elastic-email.service.d.ts.map +1 -1
- package/dist/services/mail/elastic-email.service.js +10 -13
- package/dist/services/mail/elastic-email.service.js.map +1 -1
- package/dist/services/mail/smtp-email.service.d.ts +3 -4
- package/dist/services/mail/smtp-email.service.d.ts.map +1 -1
- package/dist/services/mail/smtp-email.service.js +19 -17
- package/dist/services/mail/smtp-email.service.js.map +1 -1
- package/dist/services/media-storage-provider-metadata.service.d.ts +11 -0
- package/dist/services/media-storage-provider-metadata.service.d.ts.map +1 -1
- package/dist/services/media-storage-provider-metadata.service.js +3 -0
- package/dist/services/media-storage-provider-metadata.service.js.map +1 -1
- package/dist/services/media.service.d.ts +2 -9
- package/dist/services/media.service.d.ts.map +1 -1
- package/dist/services/media.service.js +17 -28
- package/dist/services/media.service.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts +2 -4
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +2 -11
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.d.ts +3 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.js +16 -12
- package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
- package/dist/services/mediaStorageProviders/index.d.ts +1 -1
- package/dist/services/mediaStorageProviders/index.d.ts.map +1 -1
- package/dist/services/mediaStorageProviders/index.js +1 -1
- package/dist/services/mediaStorageProviders/index.js.map +1 -1
- package/dist/services/menu-item-metadata.service.d.ts +2 -13
- package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
- package/dist/services/menu-item-metadata.service.js +4 -22
- package/dist/services/menu-item-metadata.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +11 -0
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +3 -0
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/model-sequence.service.d.ts +2 -13
- package/dist/services/model-sequence.service.d.ts.map +1 -1
- package/dist/services/model-sequence.service.js +4 -21
- package/dist/services/model-sequence.service.js.map +1 -1
- package/dist/services/module-metadata.service.d.ts +14 -1
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +13 -6
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/mq-message-queue.service.d.ts +2 -13
- package/dist/services/mq-message-queue.service.d.ts.map +1 -1
- package/dist/services/mq-message-queue.service.js +4 -22
- package/dist/services/mq-message-queue.service.js.map +1 -1
- package/dist/services/mq-message.service.d.ts +2 -13
- package/dist/services/mq-message.service.d.ts.map +1 -1
- package/dist/services/mq-message.service.js +4 -22
- package/dist/services/mq-message.service.js.map +1 -1
- package/dist/services/permission-metadata.service.d.ts +2 -13
- package/dist/services/permission-metadata.service.d.ts.map +1 -1
- package/dist/services/permission-metadata.service.js +4 -22
- package/dist/services/permission-metadata.service.js.map +1 -1
- package/dist/services/role-metadata.service.d.ts +2 -13
- package/dist/services/role-metadata.service.d.ts.map +1 -1
- package/dist/services/role-metadata.service.js +4 -23
- package/dist/services/role-metadata.service.js.map +1 -1
- package/dist/services/saved-filters.service.d.ts +2 -13
- package/dist/services/saved-filters.service.d.ts.map +1 -1
- package/dist/services/saved-filters.service.js +4 -21
- package/dist/services/saved-filters.service.js.map +1 -1
- package/dist/services/scheduled-job.service.d.ts +2 -13
- package/dist/services/scheduled-job.service.d.ts.map +1 -1
- package/dist/services/scheduled-job.service.js +4 -22
- package/dist/services/scheduled-job.service.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.d.ts +1 -0
- package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.js +29 -0
- package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
- package/dist/services/security-rule.service.d.ts +2 -13
- package/dist/services/security-rule.service.d.ts.map +1 -1
- package/dist/services/security-rule.service.js +5 -23
- package/dist/services/security-rule.service.js.map +1 -1
- package/dist/services/setting.service.d.ts +23 -30
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +147 -196
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/settings/default-settings-provider.service.d.ts +1058 -0
- package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -0
- package/dist/services/settings/default-settings-provider.service.js +139 -0
- package/dist/services/settings/default-settings-provider.service.js.map +1 -0
- package/dist/services/short-url/tiny-url.service.d.ts +3 -4
- package/dist/services/short-url/tiny-url.service.d.ts.map +1 -1
- package/dist/services/short-url/tiny-url.service.js +10 -13
- package/dist/services/short-url/tiny-url.service.js.map +1 -1
- package/dist/services/sms/Msg91BaseSMSService.d.ts +3 -4
- package/dist/services/sms/Msg91BaseSMSService.d.ts.map +1 -1
- package/dist/services/sms/Msg91BaseSMSService.js +3 -3
- package/dist/services/sms/Msg91BaseSMSService.js.map +1 -1
- package/dist/services/sms/Msg91OTPService.d.ts +2 -3
- package/dist/services/sms/Msg91OTPService.d.ts.map +1 -1
- package/dist/services/sms/Msg91OTPService.js +7 -13
- package/dist/services/sms/Msg91OTPService.js.map +1 -1
- package/dist/services/sms/Msg91SMSService.d.ts +2 -3
- package/dist/services/sms/Msg91SMSService.d.ts.map +1 -1
- package/dist/services/sms/Msg91SMSService.js +7 -13
- package/dist/services/sms/Msg91SMSService.js.map +1 -1
- package/dist/services/sms/TwilioSMSService.d.ts +3 -4
- package/dist/services/sms/TwilioSMSService.d.ts.map +1 -1
- package/dist/services/sms/TwilioSMSService.js +13 -16
- package/dist/services/sms/TwilioSMSService.js.map +1 -1
- package/dist/services/sms-template.service.d.ts +2 -13
- package/dist/services/sms-template.service.d.ts.map +1 -1
- package/dist/services/sms-template.service.js +4 -22
- package/dist/services/sms-template.service.js.map +1 -1
- package/dist/services/solid-introspect.service.d.ts +4 -1
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +33 -47
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/services/textract.service.d.ts +1 -4
- package/dist/services/textract.service.d.ts.map +1 -1
- package/dist/services/textract.service.js +14 -18
- package/dist/services/textract.service.js.map +1 -1
- package/dist/services/user-activity-history.service.d.ts +2 -13
- package/dist/services/user-activity-history.service.d.ts.map +1 -1
- package/dist/services/user-activity-history.service.js +4 -22
- package/dist/services/user-activity-history.service.js.map +1 -1
- package/dist/services/user-view-metadata.service.d.ts +2 -13
- package/dist/services/user-view-metadata.service.d.ts.map +1 -1
- package/dist/services/user-view-metadata.service.js +4 -22
- package/dist/services/user-view-metadata.service.js.map +1 -1
- package/dist/services/user.service.d.ts +2 -15
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +7 -28
- package/dist/services/user.service.js.map +1 -1
- package/dist/services/view-metadata.service.d.ts +2 -13
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +5 -23
- package/dist/services/view-metadata.service.js.map +1 -1
- package/dist/services/whatsapp/Msg91WhatsappService.d.ts +3 -4
- package/dist/services/whatsapp/Msg91WhatsappService.d.ts.map +1 -1
- package/dist/services/whatsapp/Msg91WhatsappService.js +12 -18
- package/dist/services/whatsapp/Msg91WhatsappService.js.map +1 -1
- package/dist/services/whatsapp/Three60WhatsappService.d.ts +1 -4
- package/dist/services/whatsapp/Three60WhatsappService.d.ts.map +1 -1
- package/dist/services/whatsapp/Three60WhatsappService.js +2 -11
- package/dist/services/whatsapp/Three60WhatsappService.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +9 -47
- package/dist/solid-core.module.js.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.js +4 -2
- package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/type-declaration-import-issue.md +24 -0
- package/package.json +2 -1
- package/src/commands/info.command.ts +101 -0
- package/src/commands/mcp.command.ts +3 -17
- package/src/commands/seed.command.ts +5 -17
- package/src/controllers/email-template.controller.ts +9 -4
- package/src/controllers/google-authentication.controller.ts +19 -12
- package/src/controllers/setting.controller.ts +6 -81
- package/src/controllers/test.controller.ts +0 -18
- package/src/decorators/settings-provider.decorator.ts +7 -0
- package/src/decorators/solid-password.decorator.ts +43 -43
- package/src/dtos/create-role-metadata.dto.ts +4 -81
- package/src/dtos/create-scheduled-job.dto.ts +4 -0
- package/src/dtos/create-setting.dto.ts +14 -1
- package/src/dtos/update-scheduled-job.dto.ts +4 -0
- package/src/dtos/update-setting.dto.ts +14 -0
- package/src/entities/scheduled-job.entity.ts +2 -0
- package/src/entities/setting.entity.ts +15 -1
- package/src/factories/mail.factory.ts +4 -4
- package/src/factories/sms.factory.ts +9 -7
- package/src/factories/whatsapp.factory.ts +4 -4
- package/src/guards/access-token.guard.ts +12 -5
- package/src/helpers/command.service.ts +44 -12
- package/src/helpers/cors.helper.ts +3 -3
- package/src/helpers/error-mapper.service.ts +0 -1
- package/src/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.ts +2 -2
- package/src/helpers/google-oauth.helper.ts +11 -7
- package/src/helpers/module.helper.ts +2 -2
- package/src/helpers/schematic.service.ts +41 -35
- package/src/helpers/solid-registry.ts +45 -16
- package/src/index.ts +2 -4
- package/src/interfaces.ts +29 -0
- package/src/passport-strategies/google-oauth.strategy.ts +11 -8
- package/src/repository/scheduled-job.repository.ts +1 -0
- package/src/seeders/email-template-seeder.service.ts +6 -4
- package/src/seeders/module-metadata-seeder.service.ts +41 -29
- package/src/seeders/seed-data/solid-core-metadata.json +120 -6
- package/src/seeders/sms-template-seeder.service.ts +6 -4
- package/src/seeders/system-fields-seeder.service.ts +3 -0
- package/src/services/action-metadata.service.ts +4 -16
- package/src/services/ai-interaction.service.ts +6 -17
- package/src/services/authentication.service.ts +175 -113
- package/src/services/bcrypt.service.ts +9 -9
- package/src/services/chatter-message-details.service.ts +5 -17
- package/src/services/chatter-message.service.ts +2 -14
- package/src/services/crud.service.ts +36 -28
- package/src/services/dashboard-question-sql-dataset-config.service.ts +4 -15
- package/src/services/dashboard-question.service.ts +4 -17
- package/src/services/dashboard-variable.service.ts +4 -16
- package/src/services/dashboard.service.ts +2 -13
- package/src/services/email-template.service.ts +3 -15
- package/src/services/export-template.service.ts +4 -18
- package/src/services/export-transaction.service.ts +4 -19
- package/src/services/field-metadata.service.ts +5 -1
- package/src/services/file.service.ts +14 -12
- package/src/services/genai/r2r-helper.service.ts +10 -6
- package/src/services/import-transaction-error-log.service.ts +5 -17
- package/src/services/import-transaction.service.ts +3 -15
- package/src/services/list-of-values.service.ts +3 -16
- package/src/services/locale.service.ts +3 -15
- package/src/services/mail/elastic-email.service.ts +7 -7
- package/src/services/mail/smtp-email.service.ts +19 -11
- package/src/services/media-storage-provider-metadata.service.ts +4 -0
- package/src/services/media.service.ts +39 -22
- package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +0 -3
- package/src/services/mediaStorageProviders/file-storage-provider.ts +24 -12
- package/src/services/mediaStorageProviders/index.ts +1 -1
- package/src/services/menu-item-metadata.service.ts +5 -17
- package/src/services/model-metadata.service.ts +4 -0
- package/src/services/model-sequence.service.ts +4 -15
- package/src/services/module-metadata.service.ts +13 -4
- package/src/services/mq-message-queue.service.ts +5 -17
- package/src/services/mq-message.service.ts +5 -17
- package/src/services/permission-metadata.service.ts +4 -16
- package/src/services/role-metadata.service.ts +3 -16
- package/src/services/saved-filters.service.ts +2 -13
- package/src/services/scheduled-job.service.ts +3 -15
- package/src/services/scheduled-jobs/scheduler.service.ts +40 -3
- package/src/services/security-rule.service.ts +4 -16
- package/src/services/setting.service.ts +223 -212
- package/src/services/settings/default-settings-provider.service.ts +157 -0
- package/src/services/short-url/tiny-url.service.ts +9 -7
- package/src/services/sms/Msg91BaseSMSService.ts +6 -4
- package/src/services/sms/Msg91OTPService.ts +7 -7
- package/src/services/sms/Msg91SMSService.ts +7 -6
- package/src/services/sms/TwilioSMSService.ts +18 -19
- package/src/services/sms-template.service.ts +3 -15
- package/src/services/solid-introspect.service.ts +45 -66
- package/src/services/textract.service.ts +13 -10
- package/src/services/user-activity-history.service.ts +5 -17
- package/src/services/user-view-metadata.service.ts +5 -17
- package/src/services/user.service.ts +7 -22
- package/src/services/view-metadata.service.ts +3 -15
- package/src/services/whatsapp/Msg91WhatsappService.ts +10 -11
- package/src/services/whatsapp/Three60WhatsappService.ts +0 -3
- package/src/solid-core.module.ts +17 -49
- package/src/transformers/typeorm/local-date-time-transformer.ts +10 -5
- package/# Password field.md +0 -8
- package/dist/config/app-builder.config.d.ts +0 -11
- package/dist/config/app-builder.config.d.ts.map +0 -1
- package/dist/config/app-builder.config.js +0 -13
- package/dist/config/app-builder.config.js.map +0 -1
- package/dist/config/common.config.d.ts +0 -96
- package/dist/config/common.config.d.ts.map +0 -1
- package/dist/config/common.config.js +0 -51
- package/dist/config/common.config.js.map +0 -1
- package/dist/config/iam.config.d.ts +0 -56
- package/dist/config/iam.config.d.ts.map +0 -1
- package/dist/config/iam.config.js +0 -35
- package/dist/config/iam.config.js.map +0 -1
- package/dist/config/jwt.config.d.ts +0 -14
- package/dist/config/jwt.config.d.ts.map +0 -1
- package/dist/config/jwt.config.js +0 -15
- package/dist/config/jwt.config.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-button-to-form-view-mcp-handler.service.d.ts +0 -16
- package/dist/services/genai/mcp-handlers/solid-add-button-to-form-view-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-button-to-form-view-mcp-handler.service.js +0 -151
- package/dist/services/genai/mcp-handlers/solid-add-button-to-form-view-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-controller-handler-method-mcp-handler.service.d.ts +0 -17
- package/dist/services/genai/mcp-handlers/solid-add-controller-handler-method-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-controller-handler-method-mcp-handler.service.js +0 -80
- package/dist/services/genai/mcp-handlers/solid-add-controller-handler-method-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-custom-service-method-mcp-handler.service.d.ts +0 -16
- package/dist/services/genai/mcp-handlers/solid-add-custom-service-method-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-custom-service-method-mcp-handler.service.js +0 -74
- package/dist/services/genai/mcp-handlers/solid-add-custom-service-method-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-fields-to-model-mcp-handler.service.d.ts +0 -12
- package/dist/services/genai/mcp-handlers/solid-add-fields-to-model-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-fields-to-model-mcp-handler.service.js +0 -47
- package/dist/services/genai/mcp-handlers/solid-add-fields-to-model-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-header-button-or-row-button-to-list-view-mcp-handler.service.d.ts +0 -16
- package/dist/services/genai/mcp-handlers/solid-add-header-button-or-row-button-to-list-view-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-header-button-or-row-button-to-list-view-mcp-handler.service.js +0 -151
- package/dist/services/genai/mcp-handlers/solid-add-header-button-or-row-button-to-list-view-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-computed-provider-mcp-handler.service.d.ts +0 -16
- package/dist/services/genai/mcp-handlers/solid-create-computed-provider-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-computed-provider-mcp-handler.service.js +0 -75
- package/dist/services/genai/mcp-handlers/solid-create-computed-provider-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-custom-form-view-widget-mcp-handler.service.d.ts +0 -14
- package/dist/services/genai/mcp-handlers/solid-create-custom-form-view-widget-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-custom-form-view-widget-mcp-handler.service.js +0 -73
- package/dist/services/genai/mcp-handlers/solid-create-custom-form-view-widget-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-model-with-fields-mcp-handler.service.d.ts +0 -14
- package/dist/services/genai/mcp-handlers/solid-create-model-with-fields-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-model-with-fields-mcp-handler.service.js +0 -45
- package/dist/services/genai/mcp-handlers/solid-create-model-with-fields-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-module-mcp-handler.service.d.ts +0 -14
- package/dist/services/genai/mcp-handlers/solid-create-module-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-module-mcp-handler.service.js +0 -51
- package/dist/services/genai/mcp-handlers/solid-create-module-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-update-layout-mcp-handler.service.d.ts +0 -12
- package/dist/services/genai/mcp-handlers/solid-update-layout-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-update-layout-mcp-handler.service.js +0 -38
- package/dist/services/genai/mcp-handlers/solid-update-layout-mcp-handler.service.js.map +0 -1
- package/dist/services/media-storage-provider-metadata-seeder.service.d.ts +0 -8
- package/dist/services/media-storage-provider-metadata-seeder.service.d.ts.map +0 -1
- package/dist/services/media-storage-provider-metadata-seeder.service.js +0 -43
- package/dist/services/media-storage-provider-metadata-seeder.service.js.map +0 -1
- package/sql-server-changes.txt +0 -88
- package/src/config/app-builder.config.ts +0 -12
- package/src/config/common.config.ts +0 -55
- package/src/config/iam.config.ts +0 -32
- package/src/config/jwt.config.ts +0 -13
- package/src/services/export_issues.txt +0 -10
- package/src/services/genai/mcp-handlers/solid-add-button-to-form-view-mcp-handler.service.ts +0 -137
- package/src/services/genai/mcp-handlers/solid-add-controller-handler-method-mcp-handler.service.ts +0 -81
- package/src/services/genai/mcp-handlers/solid-add-custom-service-method-mcp-handler.service.ts +0 -69
- package/src/services/genai/mcp-handlers/solid-add-fields-to-model-mcp-handler.service.ts +0 -68
- package/src/services/genai/mcp-handlers/solid-add-header-button-or-row-button-to-list-view-mcp-handler.service.ts +0 -141
- package/src/services/genai/mcp-handlers/solid-create-computed-provider-mcp-handler.service.ts +0 -71
- package/src/services/genai/mcp-handlers/solid-create-custom-form-view-widget-mcp-handler.service.ts +0 -72
- package/src/services/genai/mcp-handlers/solid-create-model-with-fields-mcp-handler.service.ts +0 -45
- package/src/services/genai/mcp-handlers/solid-create-module-mcp-handler.service.ts +0 -58
- package/src/services/genai/mcp-handlers/solid-update-layout-mcp-handler.service.ts +0 -40
- package/src/services/groupBy.json +0 -92
- package/src/services/media-storage-provider-metadata-seeder.service.ts +0 -33
|
@@ -50,25 +50,14 @@ const common_1 = require("@nestjs/common");
|
|
|
50
50
|
const core_1 = require("@nestjs/core");
|
|
51
51
|
const typeorm_1 = require("@nestjs/typeorm");
|
|
52
52
|
const typeorm_2 = require("typeorm");
|
|
53
|
-
const config_1 = require("@nestjs/config");
|
|
54
|
-
const crud_helper_service_1 = require("./crud-helper.service");
|
|
55
53
|
const crud_service_1 = require("./crud.service");
|
|
56
|
-
const file_service_1 = require("./file.service");
|
|
57
|
-
const model_metadata_service_1 = require("./model-metadata.service");
|
|
58
|
-
const module_metadata_service_1 = require("./module-metadata.service");
|
|
59
54
|
const fs = __importStar(require("fs/promises"));
|
|
60
55
|
const module_metadata_helper_service_1 = require("../helpers/module-metadata-helper.service");
|
|
61
56
|
const list_of_values_mapper_1 = require("../mappers/list-of-values-mapper");
|
|
62
57
|
const list_of_values_repository_1 = require("../repository/list-of-values.repository");
|
|
63
58
|
let ListOfValuesService = class ListOfValuesService extends crud_service_1.CRUDService {
|
|
64
|
-
constructor(
|
|
65
|
-
super(
|
|
66
|
-
this.modelMetadataService = modelMetadataService;
|
|
67
|
-
this.moduleMetadataService = moduleMetadataService;
|
|
68
|
-
this.configService = configService;
|
|
69
|
-
this.fileService = fileService;
|
|
70
|
-
this.discoveryService = discoveryService;
|
|
71
|
-
this.crudHelperService = crudHelperService;
|
|
59
|
+
constructor(entityManager, repo, moduleRef, moduleMetadataHelperService, listOfValuesMapper) {
|
|
60
|
+
super(entityManager, repo, 'listOfValues', 'solid-core', moduleRef);
|
|
72
61
|
this.entityManager = entityManager;
|
|
73
62
|
this.repo = repo;
|
|
74
63
|
this.moduleRef = moduleRef;
|
|
@@ -221,15 +210,8 @@ let ListOfValuesService = class ListOfValuesService extends crud_service_1.CRUDS
|
|
|
221
210
|
exports.ListOfValuesService = ListOfValuesService;
|
|
222
211
|
exports.ListOfValuesService = ListOfValuesService = __decorate([
|
|
223
212
|
(0, common_1.Injectable)(),
|
|
224
|
-
__param(0, (0,
|
|
225
|
-
|
|
226
|
-
__metadata("design:paramtypes", [model_metadata_service_1.ModelMetadataService,
|
|
227
|
-
module_metadata_service_1.ModuleMetadataService,
|
|
228
|
-
config_1.ConfigService,
|
|
229
|
-
file_service_1.FileService,
|
|
230
|
-
core_1.DiscoveryService,
|
|
231
|
-
crud_helper_service_1.CrudHelperService,
|
|
232
|
-
typeorm_2.EntityManager,
|
|
213
|
+
__param(0, (0, typeorm_1.InjectEntityManager)()),
|
|
214
|
+
__metadata("design:paramtypes", [typeorm_2.EntityManager,
|
|
233
215
|
list_of_values_repository_1.ListOfValuesRepository,
|
|
234
216
|
core_1.ModuleRef,
|
|
235
217
|
module_metadata_helper_service_1.ModuleMetadataHelperService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-of-values.service.js","sourceRoot":"","sources":["../../src/services/list-of-values.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, Inject, Injectable } from '@nestjs/common';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\n\nimport { ConfigService } from '@nestjs/config';\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';\n\n\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { ListOfValuesMapper } from 'src/mappers/list-of-values-mapper';\nimport { ListOfValuesRepository } from 'src/repository/list-of-values.repository';\nimport { ListOfValues } from '../entities/list-of-values.entity';\n\n\n@Injectable()\nexport class ListOfValuesService extends CRUDService<ListOfValues> {\n logger: any;\n // moduleMetadataHelperService: any;\n // listOfValuesMapper: any;\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 \n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(ListOfValues, 'default')\n // readonly repo: Repository<ListOfValues>,\n readonly repo: ListOfValuesRepository,\n readonly moduleRef: ModuleRef,\n private readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n readonly listOfValuesMapper: ListOfValuesMapper,\n\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'listOfValues', 'solid-core', moduleRef);\n }\n async findOneByValueAndType(lovValue: string, lovType: string) {\n return await this.repo.findOne({\n where: {\n value: lovValue,\n type: lovType,\n },\n });\n }\n\n async findAll(): Promise<ListOfValues[]> {\n return await this.repo.find();\n }\n\n async upsert(updateListOfValuesDto: any) {\n // First check if module already exists using name\n const existingListOfValue = await this.repo.findOne({\n where: {\n value: updateListOfValuesDto.value\n }\n })\n\n // if found\n if (existingListOfValue) {\n const updatedListOfValuesDto = { ...existingListOfValue, ...updateListOfValuesDto };\n return this.repo.save(updatedListOfValuesDto);\n }\n // if not found - create new \n else {\n const listOfValue = this.repo.create(updateListOfValuesDto);\n return this.repo.save(listOfValue);\n }\n }\n\n\n async saveListofValuesToConfig(entity: ListOfValues) {\n if (!entity) {\n this.logger.debug('No entity found in the ListofValuesSubscriber saveListofvalueToConfig method');\n return;\n }\n\n // Validate list of value details\n const listofvalue = entity as ListOfValues;\n const moduleMetadata = entity.module;\n if (!moduleMetadata) {\n throw new Error(`Module metadata not found for listofvalue id ${entity.id}`);\n }\n\n // Get config file details\n const { filePath, metaData } = await this.getConfigFileDetails(moduleMetadata.name); // sting expected module name\n if (!filePath || !metaData) {\n throw new Error(`Configuration details not found for module: ${moduleMetadata.name}`);\n }\n\n // Write the listofvalue to the config file\n await this.writeToConfig(metaData, listofvalue, filePath);\n }\n\n async updateListofValuesToConfig(oldentity: ListOfValues, entity: ListOfValues) {\n if (!entity) {\n this.logger.debug('No entity found in the ListofValuesSubscriber saveListofvalueToConfig method');\n return;\n }\n\n // Validate list of value details\n const oldlistofvalue = oldentity as ListOfValues;\n const listofvalue = entity as ListOfValues;\n const moduleMetadata = entity.module;\n if (!moduleMetadata) {\n throw new Error(`Module metadata not found for listofvalue id ${entity.id}`);\n }\n\n // Get config file details\n const { filePath, metaData } = await this.getConfigFileDetails(moduleMetadata.name); // sting expected module name\n if (!filePath || !metaData) {\n throw new Error(`Configuration details not found for module: ${moduleMetadata.name}`);\n }\n\n // Write the listofvalue to the config file\n await this.updateToConfig(metaData, oldlistofvalue, listofvalue, filePath);\n }\n\n async deleteListOfValuesFromConfig(entity: ListOfValues) {\n if (!entity) {\n this.logger.debug('No entity found in the ListofValuesSubscriber saveListofvalueToConfig method');\n return;\n }\n\n // Validate list of value details\n const listofvalue = entity as ListOfValues;\n const moduleMetadata = entity.module;\n if (!moduleMetadata) {\n throw new Error(`Module metadata not found for listofvalue id ${entity.id}`);\n }\n\n // Get config file details\n const { filePath, metaData } = await this.getConfigFileDetails(moduleMetadata.name); // sting expected module name\n if (!filePath || !metaData) {\n throw new Error(`Configuration details not found for module: ${moduleMetadata.name}`);\n }\n\n // delete the listofvalue to the config file\n await this.deleteFromConfig(metaData, listofvalue, filePath);\n }\n\n private async getConfigFileDetails(moduleName: string): Promise<{ filePath: string; metaData: any }> {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);\n try {\n await fs.access(filePath);\n } catch (error) {\n throw new Error(`Configuration file not found for module: ${moduleName}`);\n }\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n return { filePath, metaData };\n }\n\n private async writeToConfig(metaData: any, listofvalues: ListOfValues, filePath: string) {\n const dto = await this.listOfValuesMapper.toDto(listofvalues);\n\n if (!Array.isArray(metaData.listOfValues)) {\n metaData.listOfValues = [];\n }\n\n // Match by type + value + module\n const existingIndex = metaData.listOfValues.findIndex(\n (item: { type: string; value: string; module: number }) =>\n item.type === dto.type &&\n item.value === dto.value &&\n item.module === dto.module\n );\n\n if (existingIndex !== -1) {\n // Replace existing entry\n metaData.listOfValues[existingIndex] = dto;\n } else {\n // Insert new entry\n // metaData.listOfValues.unshift(dto);\n\n if (metaData.listOfValues.length === 0) {\n // Case 1: Empty array → add first item\n metaData.listOfValues.push(dto);\n } else {\n // Case 2: Insert new item right after index 0\n metaData.listOfValues.unshift(dto);\n }\n\n }\n\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n }\n\n private async updateToConfig(metaData: any, oldlistofvalues: ListOfValues, listofvalues: ListOfValues, filePath: string) {\n const newvalue = await this.listOfValuesMapper.toDto(listofvalues);\n const oldvalue = await this.listOfValuesMapper.toDto(oldlistofvalues);\n\n if (!Array.isArray(metaData.listOfValues)) {\n metaData.listOfValues = [];\n }\n\n const searchType = oldvalue.type || newvalue.type;\n const searchValue = oldvalue.value || newvalue.value;\n const searchModule = oldvalue.module || newvalue.module;\n\n const existingIndex = metaData.listOfValues.findIndex(\n (item: { type: string; value: string; module: number }) =>\n item.type === searchType && item.value === searchValue && item.module === searchModule\n );\n if (existingIndex !== -1) {\n // Replace existing match\n metaData.listOfValues[existingIndex] = newvalue;\n }\n\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n }\n\n private async deleteFromConfig(metaData: any, listofvalues: ListOfValues, filePath: string) {\n const dto = await this.listOfValuesMapper.toDto(listofvalues);\n\n if (!Array.isArray(metaData.listOfValues)) {\n metaData.listOfValues = [];\n }\n\n // Match by type + value + module\n const existingIndex = metaData.listOfValues.findIndex(\n (item: { type: string; value: string; module: number }) =>\n item.type === dto.type &&\n item.value === dto.value &&\n item.module === dto.module\n );\n\n if (existingIndex !== -1) {\n // Remove the item\n metaData.listOfValues.splice(existingIndex, 1);\n this.logger.debug(`Deleted LOV ${dto.type}:${dto.value} (module ${dto.module}) from config`);\n } else {\n this.logger.warn(\n `LOV ${dto.type}:${dto.value} (module ${dto.module}) not found in config during delete`\n );\n }\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"list-of-values.service.js","sourceRoot":"","sources":["../../src/services/list-of-values.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\n\n\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { ListOfValuesMapper } from 'src/mappers/list-of-values-mapper';\nimport { ListOfValuesRepository } from 'src/repository/list-of-values.repository';\nimport { ListOfValues } from '../entities/list-of-values.entity';\n\n\n@Injectable()\nexport class ListOfValuesService extends CRUDService<ListOfValues> {\n logger: any;\n // moduleMetadataHelperService: any;\n // listOfValuesMapper: any;\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(ListOfValues, 'default')\n // readonly repo: Repository<ListOfValues>,\n readonly repo: ListOfValuesRepository,\n readonly moduleRef: ModuleRef,\n private readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n readonly listOfValuesMapper: ListOfValuesMapper,\n\n ) {\n super(entityManager, repo, 'listOfValues', 'solid-core', moduleRef);\n }\n async findOneByValueAndType(lovValue: string, lovType: string) {\n return await this.repo.findOne({\n where: {\n value: lovValue,\n type: lovType,\n },\n });\n }\n\n async findAll(): Promise<ListOfValues[]> {\n return await this.repo.find();\n }\n\n async upsert(updateListOfValuesDto: any) {\n // First check if module already exists using name\n const existingListOfValue = await this.repo.findOne({\n where: {\n value: updateListOfValuesDto.value\n }\n })\n\n // if found\n if (existingListOfValue) {\n const updatedListOfValuesDto = { ...existingListOfValue, ...updateListOfValuesDto };\n return this.repo.save(updatedListOfValuesDto);\n }\n // if not found - create new \n else {\n const listOfValue = this.repo.create(updateListOfValuesDto);\n return this.repo.save(listOfValue);\n }\n }\n\n\n async saveListofValuesToConfig(entity: ListOfValues) {\n if (!entity) {\n this.logger.debug('No entity found in the ListofValuesSubscriber saveListofvalueToConfig method');\n return;\n }\n\n // Validate list of value details\n const listofvalue = entity as ListOfValues;\n const moduleMetadata = entity.module;\n if (!moduleMetadata) {\n throw new Error(`Module metadata not found for listofvalue id ${entity.id}`);\n }\n\n // Get config file details\n const { filePath, metaData } = await this.getConfigFileDetails(moduleMetadata.name); // sting expected module name\n if (!filePath || !metaData) {\n throw new Error(`Configuration details not found for module: ${moduleMetadata.name}`);\n }\n\n // Write the listofvalue to the config file\n await this.writeToConfig(metaData, listofvalue, filePath);\n }\n\n async updateListofValuesToConfig(oldentity: ListOfValues, entity: ListOfValues) {\n if (!entity) {\n this.logger.debug('No entity found in the ListofValuesSubscriber saveListofvalueToConfig method');\n return;\n }\n\n // Validate list of value details\n const oldlistofvalue = oldentity as ListOfValues;\n const listofvalue = entity as ListOfValues;\n const moduleMetadata = entity.module;\n if (!moduleMetadata) {\n throw new Error(`Module metadata not found for listofvalue id ${entity.id}`);\n }\n\n // Get config file details\n const { filePath, metaData } = await this.getConfigFileDetails(moduleMetadata.name); // sting expected module name\n if (!filePath || !metaData) {\n throw new Error(`Configuration details not found for module: ${moduleMetadata.name}`);\n }\n\n // Write the listofvalue to the config file\n await this.updateToConfig(metaData, oldlistofvalue, listofvalue, filePath);\n }\n\n async deleteListOfValuesFromConfig(entity: ListOfValues) {\n if (!entity) {\n this.logger.debug('No entity found in the ListofValuesSubscriber saveListofvalueToConfig method');\n return;\n }\n\n // Validate list of value details\n const listofvalue = entity as ListOfValues;\n const moduleMetadata = entity.module;\n if (!moduleMetadata) {\n throw new Error(`Module metadata not found for listofvalue id ${entity.id}`);\n }\n\n // Get config file details\n const { filePath, metaData } = await this.getConfigFileDetails(moduleMetadata.name); // sting expected module name\n if (!filePath || !metaData) {\n throw new Error(`Configuration details not found for module: ${moduleMetadata.name}`);\n }\n\n // delete the listofvalue to the config file\n await this.deleteFromConfig(metaData, listofvalue, filePath);\n }\n\n private async getConfigFileDetails(moduleName: string): Promise<{ filePath: string; metaData: any }> {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);\n try {\n await fs.access(filePath);\n } catch (error) {\n throw new Error(`Configuration file not found for module: ${moduleName}`);\n }\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n return { filePath, metaData };\n }\n\n private async writeToConfig(metaData: any, listofvalues: ListOfValues, filePath: string) {\n const dto = await this.listOfValuesMapper.toDto(listofvalues);\n\n if (!Array.isArray(metaData.listOfValues)) {\n metaData.listOfValues = [];\n }\n\n // Match by type + value + module\n const existingIndex = metaData.listOfValues.findIndex(\n (item: { type: string; value: string; module: number }) =>\n item.type === dto.type &&\n item.value === dto.value &&\n item.module === dto.module\n );\n\n if (existingIndex !== -1) {\n // Replace existing entry\n metaData.listOfValues[existingIndex] = dto;\n } else {\n // Insert new entry\n // metaData.listOfValues.unshift(dto);\n\n if (metaData.listOfValues.length === 0) {\n // Case 1: Empty array → add first item\n metaData.listOfValues.push(dto);\n } else {\n // Case 2: Insert new item right after index 0\n metaData.listOfValues.unshift(dto);\n }\n\n }\n\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n }\n\n private async updateToConfig(metaData: any, oldlistofvalues: ListOfValues, listofvalues: ListOfValues, filePath: string) {\n const newvalue = await this.listOfValuesMapper.toDto(listofvalues);\n const oldvalue = await this.listOfValuesMapper.toDto(oldlistofvalues);\n\n if (!Array.isArray(metaData.listOfValues)) {\n metaData.listOfValues = [];\n }\n\n const searchType = oldvalue.type || newvalue.type;\n const searchValue = oldvalue.value || newvalue.value;\n const searchModule = oldvalue.module || newvalue.module;\n\n const existingIndex = metaData.listOfValues.findIndex(\n (item: { type: string; value: string; module: number }) =>\n item.type === searchType && item.value === searchValue && item.module === searchModule\n );\n if (existingIndex !== -1) {\n // Replace existing match\n metaData.listOfValues[existingIndex] = newvalue;\n }\n\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n }\n\n private async deleteFromConfig(metaData: any, listofvalues: ListOfValues, filePath: string) {\n const dto = await this.listOfValuesMapper.toDto(listofvalues);\n\n if (!Array.isArray(metaData.listOfValues)) {\n metaData.listOfValues = [];\n }\n\n // Match by type + value + module\n const existingIndex = metaData.listOfValues.findIndex(\n (item: { type: string; value: string; module: number }) =>\n item.type === dto.type &&\n item.value === dto.value &&\n item.module === dto.module\n );\n\n if (existingIndex !== -1) {\n // Remove the item\n metaData.listOfValues.splice(existingIndex, 1);\n this.logger.debug(`Deleted LOV ${dto.type}:${dto.value} (module ${dto.module}) from config`);\n } else {\n this.logger.warn(\n `LOV ${dto.type}:${dto.value} (module ${dto.module}) not found in config during delete`\n );\n }\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n\n }\n}\n"]}
|
|
@@ -1,29 +1,18 @@
|
|
|
1
1
|
import { OnApplicationBootstrap } from '@nestjs/common';
|
|
2
|
-
import {
|
|
2
|
+
import { ModuleRef } from "@nestjs/core";
|
|
3
3
|
import { EntityManager } from 'typeorm';
|
|
4
|
-
import { ConfigService } from '@nestjs/config';
|
|
5
4
|
import { Locale } from 'src/entities/locale.entity';
|
|
6
5
|
import { SolidRegistry } from 'src/helpers/solid-registry';
|
|
7
6
|
import { LocaleRepository } from 'src/repository/locale.repository';
|
|
8
|
-
import { CrudHelperService } from 'src/services/crud-helper.service';
|
|
9
7
|
import { CRUDService } from 'src/services/crud.service';
|
|
10
|
-
import { FileService } from 'src/services/file.service';
|
|
11
|
-
import { ModelMetadataService } from 'src/services/model-metadata.service';
|
|
12
|
-
import { ModuleMetadataService } from 'src/services/module-metadata.service';
|
|
13
8
|
import { RequestContextService } from './request-context.service';
|
|
14
9
|
export declare class LocaleService extends CRUDService<Locale> implements OnApplicationBootstrap {
|
|
15
|
-
readonly modelMetadataService: ModelMetadataService;
|
|
16
|
-
readonly moduleMetadataService: ModuleMetadataService;
|
|
17
|
-
readonly configService: ConfigService;
|
|
18
|
-
readonly fileService: FileService;
|
|
19
|
-
readonly discoveryService: DiscoveryService;
|
|
20
|
-
readonly crudHelperService: CrudHelperService;
|
|
21
10
|
readonly entityManager: EntityManager;
|
|
22
11
|
readonly repo: LocaleRepository;
|
|
23
12
|
readonly moduleRef: ModuleRef;
|
|
24
13
|
readonly requestContextService: RequestContextService;
|
|
25
14
|
readonly solidRegistry: SolidRegistry;
|
|
26
|
-
constructor(
|
|
15
|
+
constructor(entityManager: EntityManager, repo: LocaleRepository, moduleRef: ModuleRef, requestContextService: RequestContextService, solidRegistry: SolidRegistry);
|
|
27
16
|
private readonly logger;
|
|
28
17
|
onApplicationBootstrap(): void;
|
|
29
18
|
loadLocales(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale.service.d.ts","sourceRoot":"","sources":["../../src/services/locale.service.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"locale.service.d.ts","sourceRoot":"","sources":["../../src/services/locale.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,qBACa,aAAc,SAAQ,WAAW,CAAC,MAAM,CAAE,YAAW,sBAAsB;IAGpF,QAAQ,CAAC,aAAa,EAAE,aAAa;IAGrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB;IAE/B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAI7B,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa;gBAV5B,aAAa,EAAE,aAAa,EAG5B,IAAI,EAAE,gBAAgB,EAEtB,SAAS,EAAE,SAAS,EAIpB,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa;IAIvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,sBAAsB;IAIf,WAAW;CAKnB"}
|
|
@@ -18,24 +18,13 @@ const common_1 = require("@nestjs/common");
|
|
|
18
18
|
const core_1 = require("@nestjs/core");
|
|
19
19
|
const typeorm_1 = require("@nestjs/typeorm");
|
|
20
20
|
const typeorm_2 = require("typeorm");
|
|
21
|
-
const config_1 = require("@nestjs/config");
|
|
22
21
|
const solid_registry_1 = require("../helpers/solid-registry");
|
|
23
22
|
const locale_repository_1 = require("../repository/locale.repository");
|
|
24
|
-
const crud_helper_service_1 = require("./crud-helper.service");
|
|
25
23
|
const crud_service_1 = require("./crud.service");
|
|
26
|
-
const file_service_1 = require("./file.service");
|
|
27
|
-
const model_metadata_service_1 = require("./model-metadata.service");
|
|
28
|
-
const module_metadata_service_1 = require("./module-metadata.service");
|
|
29
24
|
const request_context_service_1 = require("./request-context.service");
|
|
30
25
|
let LocaleService = LocaleService_1 = class LocaleService extends crud_service_1.CRUDService {
|
|
31
|
-
constructor(
|
|
32
|
-
super(
|
|
33
|
-
this.modelMetadataService = modelMetadataService;
|
|
34
|
-
this.moduleMetadataService = moduleMetadataService;
|
|
35
|
-
this.configService = configService;
|
|
36
|
-
this.fileService = fileService;
|
|
37
|
-
this.discoveryService = discoveryService;
|
|
38
|
-
this.crudHelperService = crudHelperService;
|
|
26
|
+
constructor(entityManager, repo, moduleRef, requestContextService, solidRegistry) {
|
|
27
|
+
super(entityManager, repo, 'locale', 'solid-core', moduleRef);
|
|
39
28
|
this.entityManager = entityManager;
|
|
40
29
|
this.repo = repo;
|
|
41
30
|
this.moduleRef = moduleRef;
|
|
@@ -55,15 +44,8 @@ let LocaleService = LocaleService_1 = class LocaleService extends crud_service_1
|
|
|
55
44
|
exports.LocaleService = LocaleService;
|
|
56
45
|
exports.LocaleService = LocaleService = LocaleService_1 = __decorate([
|
|
57
46
|
(0, common_1.Injectable)(),
|
|
58
|
-
__param(0, (0,
|
|
59
|
-
|
|
60
|
-
__metadata("design:paramtypes", [model_metadata_service_1.ModelMetadataService,
|
|
61
|
-
module_metadata_service_1.ModuleMetadataService,
|
|
62
|
-
config_1.ConfigService,
|
|
63
|
-
file_service_1.FileService,
|
|
64
|
-
core_1.DiscoveryService,
|
|
65
|
-
crud_helper_service_1.CrudHelperService,
|
|
66
|
-
typeorm_2.EntityManager,
|
|
47
|
+
__param(0, (0, typeorm_1.InjectEntityManager)()),
|
|
48
|
+
__metadata("design:paramtypes", [typeorm_2.EntityManager,
|
|
67
49
|
locale_repository_1.LocaleRepository,
|
|
68
50
|
core_1.ModuleRef,
|
|
69
51
|
request_context_service_1.RequestContextService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale.service.js","sourceRoot":"","sources":["../../src/services/locale.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"locale.service.js","sourceRoot":"","sources":["../../src/services/locale.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA4E;AAC5E,uCAAyC;AACzC,6CAAsD;AACtD,qCAAwC;AAGxC,8DAA2D;AAC3D,uEAAoE;AACpE,iDAAwD;AACxD,uEAAkE;AAE3D,IAAM,aAAa,qBAAnB,MAAM,aAAc,SAAQ,0BAAmB;IACpD,YAEE,aAAqC,EAG5B,IAAsB,EAEtB,SAAoB,EAIpB,qBAA4C,EAC5C,aAA4B;QAEtC,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAZpD,kBAAa,GAAb,aAAa,CAAe;QAG5B,SAAI,GAAJ,IAAI,CAAkB;QAEtB,cAAS,GAAT,SAAS,CAAW;QAIpB,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,kBAAa,GAAb,aAAa,CAAe;QAItB,WAAM,GAAG,IAAI,eAAM,CAAC,eAAa,CAAC,IAAI,CAAC,CAAA;IADzD,CAAC;IAEA,sBAAsB;QAEpB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IACA,KAAK,CAAC,WAAW;QAChB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,OAAO,CAAC,MAAM,wBAAwB,CAAC,CAAC;QACpE,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF,CAAA;AA3BY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,6BAAmB,GAAE,CAAA;qCACE,uBAAa;QAGtB,oCAAgB;QAEX,gBAAS;QAIG,+CAAqB;QAC7B,8BAAa;GAb5B,aAAa,CA2BzB","sourcesContent":["import { Injectable, Logger, OnApplicationBootstrap } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\n\nimport { Locale } from 'src/entities/locale.entity';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { LocaleRepository } from 'src/repository/locale.repository';\nimport { CRUDService } from 'src/services/crud.service';\nimport { RequestContextService } from './request-context.service';\n@Injectable()\nexport class LocaleService extends CRUDService<Locale> implements OnApplicationBootstrap{\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(Locale, 'default')\n // readonly repo: Repository<Locale>,\n readonly repo: LocaleRepository,\n // @InjectRepository(Locale, 'default')\n readonly moduleRef: ModuleRef,\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n // private readonly modelMetadataRepo: ModelMetadataRepository,\n readonly requestContextService: RequestContextService,\n readonly solidRegistry: SolidRegistry,\n ) {\n super(entityManager, repo, 'locale', 'solid-core', moduleRef);\n }\n private readonly logger = new Logger(LocaleService.name)\n onApplicationBootstrap() {\n // Load the security rules from the database\n this.loadLocales();\n }\n async loadLocales() {\n const locales = await this.repo.find();\n this.logger.debug(`Loaded ${locales.length} locales into registry`);\n this.solidRegistry.registerlocales(locales);\n }\n}\n"]}
|
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import { ConfigType } from '@nestjs/config';
|
|
2
|
-
import commonConfig from 'src/config/common.config';
|
|
3
1
|
import { QueueMessage } from 'src/interfaces/mq';
|
|
4
2
|
import { EmailTemplateService } from '../email-template.service';
|
|
5
3
|
import { PdfService } from '../pdf.service';
|
|
6
4
|
import { FileService } from '../file.service';
|
|
7
5
|
import { IMail, MailAttachmentWrapper } from "../../interfaces";
|
|
8
6
|
import { PublisherFactory } from '../queues/publisher-factory.service';
|
|
7
|
+
import { SettingService } from '../setting.service';
|
|
9
8
|
export declare class ElasticEmailService implements IMail {
|
|
10
|
-
private readonly commonConfiguration;
|
|
11
9
|
private readonly publisherFactory;
|
|
12
10
|
private readonly emailTemplateService;
|
|
13
11
|
private readonly pdfService;
|
|
14
12
|
private readonly fileService;
|
|
13
|
+
private readonly settingService;
|
|
15
14
|
private readonly logger;
|
|
16
15
|
private readonly emailsApi;
|
|
17
|
-
constructor(
|
|
16
|
+
constructor(publisherFactory: PublisherFactory<any>, emailTemplateService: EmailTemplateService, pdfService: PdfService, fileService: FileService, settingService: SettingService);
|
|
18
17
|
sendEmailUsingTemplate(to: string, templateName: string, templateParams: any, shouldQueueEmails?: boolean, parentEntity?: any, parentEntityId?: any): Promise<void>;
|
|
19
18
|
sendEmail(to: string, subject: string, body: string, shouldQueueEmails?: boolean, parentEntity?: any, parentEntityId?: any, wrapperAttachments?: MailAttachmentWrapper[]): Promise<void>;
|
|
20
|
-
sendEmailAsynchronously(message: QueueMessage<any>):
|
|
19
|
+
sendEmailAsynchronously(message: QueueMessage<any>): void;
|
|
21
20
|
sendEmailSynchronously(message: QueueMessage<any>): Promise<void>;
|
|
22
21
|
private toAttachmentWrapper;
|
|
23
22
|
private toMessageAttachment;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elastic-email.service.d.ts","sourceRoot":"","sources":["../../../src/services/mail/elastic-email.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"elastic-email.service.d.ts","sourceRoot":"","sources":["../../../src/services/mail/elastic-email.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAkB,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpD,qBAEa,mBAAoB,YAAW,KAAK;IAMzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IATnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAIN,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACvC,oBAAoB,EAAE,oBAAoB,EAC1C,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc;IAQ7C,sBAAsB,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,iBAAiB,UAAQ,EAAE,YAAY,MAAO,EAAE,cAAc,MAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BnK,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,UAAQ,EAAE,YAAY,MAAO,EAAE,cAAc,MAAO,EAAE,kBAAkB,GAAE,qBAAqB,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BlM,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC;IAQ5C,sBAAsB,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAoDzD,mBAAmB;YAcnB,mBAAmB;YAQnB,kBAAkB;CAQnC"}
|
|
@@ -8,9 +8,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
-
};
|
|
14
11
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
13
|
};
|
|
@@ -19,24 +16,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
19
16
|
exports.ElasticEmailService = void 0;
|
|
20
17
|
const common_1 = require("@nestjs/common");
|
|
21
18
|
const handlebars_1 = __importDefault(require("handlebars"));
|
|
22
|
-
const common_config_1 = __importDefault(require("../../config/common.config"));
|
|
23
19
|
const email_template_service_1 = require("../email-template.service");
|
|
24
20
|
const pdf_service_1 = require("../pdf.service");
|
|
25
21
|
const file_service_1 = require("../file.service");
|
|
26
22
|
const publisher_factory_service_1 = require("../queues/publisher-factory.service");
|
|
27
23
|
const mail_provider_decorator_1 = require("../../decorators/mail-provider.decorator");
|
|
24
|
+
const setting_service_1 = require("../setting.service");
|
|
28
25
|
const ElasticEmail = require('@elasticemail/elasticemail-client');
|
|
29
26
|
let ElasticEmailService = ElasticEmailService_1 = class ElasticEmailService {
|
|
30
|
-
constructor(
|
|
31
|
-
this.commonConfiguration = commonConfiguration;
|
|
27
|
+
constructor(publisherFactory, emailTemplateService, pdfService, fileService, settingService) {
|
|
32
28
|
this.publisherFactory = publisherFactory;
|
|
33
29
|
this.emailTemplateService = emailTemplateService;
|
|
34
30
|
this.pdfService = pdfService;
|
|
35
31
|
this.fileService = fileService;
|
|
32
|
+
this.settingService = settingService;
|
|
36
33
|
this.logger = new common_1.Logger(ElasticEmailService_1.name);
|
|
37
34
|
const client = ElasticEmail.ApiClient.instance;
|
|
38
35
|
const apikey = client.authentications['apikey'];
|
|
39
|
-
apikey.apiKey =
|
|
36
|
+
apikey.apiKey = process.env.COMMON_API_EMAIL_KEY;
|
|
40
37
|
this.emailsApi = new ElasticEmail.EmailsApi();
|
|
41
38
|
}
|
|
42
39
|
async sendEmailUsingTemplate(to, templateName, templateParams, shouldQueueEmails = false, parentEntity = null, parentEntityId = null) {
|
|
@@ -59,7 +56,7 @@ let ElasticEmailService = ElasticEmailService_1 = class ElasticEmailService {
|
|
|
59
56
|
async sendEmail(to, subject, body, shouldQueueEmails = false, parentEntity = null, parentEntityId = null, wrapperAttachments = []) {
|
|
60
57
|
const message = {
|
|
61
58
|
payload: {
|
|
62
|
-
from: this.
|
|
59
|
+
from: this.settingService.getConfigValue("smtpMailFrom"),
|
|
63
60
|
to: to,
|
|
64
61
|
subject: subject,
|
|
65
62
|
body: body,
|
|
@@ -71,14 +68,14 @@ let ElasticEmailService = ElasticEmailService_1 = class ElasticEmailService {
|
|
|
71
68
|
if (shouldQueueEmails === true) {
|
|
72
69
|
this.sendEmailAsynchronously(message);
|
|
73
70
|
}
|
|
74
|
-
else if (shouldQueueEmails == false && this.
|
|
71
|
+
else if (shouldQueueEmails == false && this.settingService.getConfigValue("shouldQueueEmails") === true) {
|
|
75
72
|
this.sendEmailAsynchronously(message);
|
|
76
73
|
}
|
|
77
74
|
else {
|
|
78
75
|
await this.sendEmailSynchronously(message);
|
|
79
76
|
}
|
|
80
77
|
}
|
|
81
|
-
|
|
78
|
+
sendEmailAsynchronously(message) {
|
|
82
79
|
const { to, subject, body } = message.payload;
|
|
83
80
|
this.publisherFactory.publish(message, 'ApiEmailQueuePublisher');
|
|
84
81
|
this.logger.debug(`Queueing email to ${to} with subject ${subject} and body ${body}`);
|
|
@@ -158,10 +155,10 @@ exports.ElasticEmailService = ElasticEmailService;
|
|
|
158
155
|
exports.ElasticEmailService = ElasticEmailService = ElasticEmailService_1 = __decorate([
|
|
159
156
|
(0, common_1.Injectable)(),
|
|
160
157
|
(0, mail_provider_decorator_1.MailProvider)(),
|
|
161
|
-
|
|
162
|
-
__metadata("design:paramtypes", [void 0, publisher_factory_service_1.PublisherFactory,
|
|
158
|
+
__metadata("design:paramtypes", [publisher_factory_service_1.PublisherFactory,
|
|
163
159
|
email_template_service_1.EmailTemplateService,
|
|
164
160
|
pdf_service_1.PdfService,
|
|
165
|
-
file_service_1.FileService
|
|
161
|
+
file_service_1.FileService,
|
|
162
|
+
setting_service_1.SettingService])
|
|
166
163
|
], ElasticEmailService);
|
|
167
164
|
//# sourceMappingURL=elastic-email.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elastic-email.service.js","sourceRoot":"","sources":["../../../src/services/mail/elastic-email.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable, Logger } from '@nestjs/common';\nimport { ConfigType } from '@nestjs/config';\nimport Handlebars from \"handlebars\";\nimport commonConfig from 'src/config/common.config';\nimport { EmailAttachment } from 'src/entities/email-attachment.entity';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport { EmailTemplateService } from '../email-template.service';\nimport { PdfService } from '../pdf.service';\nimport { FileService } from '../file.service';\nimport { IMail, MailAttachment, MailAttachmentWrapper } from \"../../interfaces\";\nimport { PublisherFactory } from '../queues/publisher-factory.service';\nimport { MailProvider } from 'src/decorators/mail-provider.decorator';\n\nconst ElasticEmail = require('@elasticemail/elasticemail-client');\n\n@Injectable()\n@MailProvider()\nexport class ElasticEmailService implements IMail {\n private readonly logger = new Logger(ElasticEmailService.name);\n private readonly emailsApi;\n\n constructor(\n @Inject(commonConfig.KEY)\n private readonly commonConfiguration: ConfigType<typeof commonConfig>,\n // private readonly emailPublisher: ApiEmailQueuePublisher,\n private readonly publisherFactory: PublisherFactory<any>,\n private readonly emailTemplateService: EmailTemplateService,\n private readonly pdfService: PdfService,\n private readonly fileService: FileService,\n ) {\n const client = ElasticEmail.ApiClient.instance;\n const apikey = client.authentications['apikey'];\n apikey.apiKey = commonConfiguration.apiMail.key;\n this.emailsApi = new ElasticEmail.EmailsApi();\n }\n\n async sendEmailUsingTemplate(to: string, templateName: string, templateParams: any, shouldQueueEmails = false, parentEntity = null, parentEntityId = null): Promise<void> {\n // Load template and evaluate it. \n const emailTemplate = await this.emailTemplateService.findOneByName(templateName, { attachments: true });\n if (!emailTemplate) {\n throw new Error(`Invalid template name ${templateName}`);\n }\n\n // Evaluate the body template.\n const bodyTemplate = Handlebars.compile(emailTemplate.body);\n const body = bodyTemplate(templateParams);\n\n // Evaluate the subject template \n const subjectTemplate = Handlebars.compile(emailTemplate.subject);\n const subject = subjectTemplate(templateParams);\n\n // Populate the email with the template.\n const emailTemplateAttachments = emailTemplate.attachments;\n const attachmentWrappers: MailAttachmentWrapper[] = [];\n for (const attachment of emailTemplateAttachments) {\n const attachmentWrapper = await this.toAttachmentWrapper(attachment, templateParams);\n attachmentWrappers.push(attachmentWrapper);\n }\n\n // Finally send the email.\n await this.sendEmail(to, subject, body, shouldQueueEmails, parentEntity, parentEntityId, attachmentWrappers);\n }\n\n async sendEmail(to: string, subject: string, body: string, shouldQueueEmails = false, parentEntity = null, parentEntityId = null, wrapperAttachments: MailAttachmentWrapper[] = []): Promise<void> {\n const message = {\n payload: {\n from: this.commonConfiguration.smtpMail.from,\n to: to,\n subject: subject,\n body: body,\n wrapperAttachments: wrapperAttachments,\n },\n parentEntity: parentEntity,\n parentEntityId: parentEntityId,\n };\n\n // Send using queue if the developer has explicitly invoked with true.\n if (shouldQueueEmails === true) {\n this.sendEmailAsynchronously(message);\n }\n // If developer has not, however system config mandates that we send using queue, still we send.\n else if (shouldQueueEmails == false && this.commonConfiguration.shouldQueueEmails === true) {\n this.sendEmailAsynchronously(message);\n }\n // Else we send synch\n else {\n await this.sendEmailSynchronously(message);\n }\n }\n\n async sendEmailAsynchronously(message: QueueMessage<any>) {\n const { to, subject, body } = message.payload;\n // this.notificationPublisherService.publish(message);\n // this.emailPublisher.publish(message);\n this.publisherFactory.publish(message, 'ApiEmailQueuePublisher');\n this.logger.debug(`Queueing email to ${to} with subject ${subject} and body ${body}`);\n }\n\n async sendEmailSynchronously(message: QueueMessage<any>): Promise<void> {\n const { from, to, subject, body, wrapperAttachments }: { from: string, to: string, subject: string, body: string, wrapperAttachments: MailAttachmentWrapper[] } = message.payload;\n const emailData = {\n Recipients: {\n To: [to]\n },\n Content: {\n Body: [\n {\n ContentType: \"HTML\", //ContentType Text version is handled by elastic email automatically through a config setting\n Charset: \"utf-8\",\n Content: body\n }\n ],\n From: from,\n Subject: subject\n }\n };\n\n // Handle relative attachments i.e attachments that are uploaded to the email service.\n const relativeAttachments = wrapperAttachments.filter(wrapperAttachment => wrapperAttachment.relativePath);\n if (relativeAttachments.length > 0) {\n emailData.Content['AttachFiles'] = relativeAttachments.map(attachment => attachment.relativePath);\n }\n\n const binaryAttachments = wrapperAttachments.filter(wrapperAttachment => wrapperAttachment.attachment);\n if (binaryAttachments.length > 0) {\n //FIXME Replace this with actual attachment.\n // const dummyAttachmentBuffer = await this.dummyAttachment();\n // emailData.Content['Attachments'] = [{\n // \"BinaryContent\": dummyAttachmentBuffer.toString('base64'),\n // \"Name\": \"Invoice.pdf\", \n // }];\n const attachments = [];\n for (const wrapperAttachment of binaryAttachments) {\n const attachment = await this.toMessageAttachment(wrapperAttachment.attachment, wrapperAttachment.attachment.templateParams);\n attachments.push(attachment);\n }\n emailData.Content['Attachments'] = attachments;\n }\n\n const callback = (error, _data, _response) => {\n if (error) {\n this.logger.debug(`Error while sending email to ${to} with subject ${subject}`, error);\n } else {\n this.logger.debug(`Sending email to ${to} with subject ${subject}`);\n }\n };\n\n this.emailsApi.emailsTransactionalPost(emailData, callback);\n }\n\n private async toAttachmentWrapper(attachment: EmailAttachment, templateParams: any): Promise<MailAttachmentWrapper> {\n const attachmentWrapper: MailAttachmentWrapper = {}\n if (attachment.template) {\n attachmentWrapper.attachment = {\n filename: attachment.displayName,\n templatePath: attachment.template,\n templateParams: templateParams,\n }\n } else {\n attachmentWrapper.relativePath = attachment.relativePath\n }\n return attachmentWrapper;\n }\n\n private async toMessageAttachment(attachment: MailAttachment, templateParams: any): Promise<any> {\n const attachmentContent = await this.getAttachmentAsPDF(attachment.templatePath, templateParams);\n return {\n \"BinaryContent\": attachmentContent.toString('base64'),\n \"Name\": attachment.filename,\n }\n }\n\n private async getAttachmentAsPDF(attachmentTemplatePath: string, templateParams: any): Promise<Buffer> {\n const template = await this.fileService.readFile(attachmentTemplatePath)\n const bodyTemplate = Handlebars.compile(template);\n const html = bodyTemplate(templateParams);\n const pdfBuffer = await this.pdfService.generatePdf(html);\n const buffer = Buffer.from(pdfBuffer);\n return buffer;\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"elastic-email.service.js","sourceRoot":"","sources":["../../../src/services/mail/elastic-email.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable, Logger } from '@nestjs/common';\nimport { ConfigType } from '@nestjs/config';\nimport Handlebars from \"handlebars\";\nimport { EmailAttachment } from 'src/entities/email-attachment.entity';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport { EmailTemplateService } from '../email-template.service';\nimport { PdfService } from '../pdf.service';\nimport { FileService } from '../file.service';\nimport { IMail, MailAttachment, MailAttachmentWrapper } from \"../../interfaces\";\nimport { PublisherFactory } from '../queues/publisher-factory.service';\nimport { MailProvider } from 'src/decorators/mail-provider.decorator';\nimport { SettingService } from '../setting.service';\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\nconst ElasticEmail = require('@elasticemail/elasticemail-client');\n\n@Injectable()\n@MailProvider()\nexport class ElasticEmailService implements IMail {\n private readonly logger = new Logger(ElasticEmailService.name);\n private readonly emailsApi;\n\n constructor(\n // private readonly emailPublisher: ApiEmailQueuePublisher,\n private readonly publisherFactory: PublisherFactory<any>,\n private readonly emailTemplateService: EmailTemplateService,\n private readonly pdfService: PdfService,\n private readonly fileService: FileService,\n private readonly settingService: SettingService\n ) {\n const client = ElasticEmail.ApiClient.instance;\n const apikey = client.authentications['apikey'];\n apikey.apiKey = process.env.COMMON_API_EMAIL_KEY;\n this.emailsApi = new ElasticEmail.EmailsApi();\n }\n\n async sendEmailUsingTemplate(to: string, templateName: string, templateParams: any, shouldQueueEmails = false, parentEntity = null, parentEntityId = null): Promise<void> {\n // Load template and evaluate it. \n const emailTemplate = await this.emailTemplateService.findOneByName(templateName, { attachments: true });\n if (!emailTemplate) {\n throw new Error(`Invalid template name ${templateName}`);\n }\n\n // Evaluate the body template.\n const bodyTemplate = Handlebars.compile(emailTemplate.body);\n const body = bodyTemplate(templateParams);\n\n // Evaluate the subject template \n const subjectTemplate = Handlebars.compile(emailTemplate.subject);\n const subject = subjectTemplate(templateParams);\n\n // Populate the email with the template.\n const emailTemplateAttachments = emailTemplate.attachments;\n const attachmentWrappers: MailAttachmentWrapper[] = [];\n for (const attachment of emailTemplateAttachments) {\n const attachmentWrapper = await this.toAttachmentWrapper(attachment, templateParams);\n attachmentWrappers.push(attachmentWrapper);\n }\n\n // Finally send the email.\n await this.sendEmail(to, subject, body, shouldQueueEmails, parentEntity, parentEntityId, attachmentWrappers);\n }\n\n async sendEmail(to: string, subject: string, body: string, shouldQueueEmails = false, parentEntity = null, parentEntityId = null, wrapperAttachments: MailAttachmentWrapper[] = []): Promise<void> {\n const message = {\n payload: {\n from: this.settingService.getConfigValue<SolidCoreSetting>(\"smtpMailFrom\"),\n to: to,\n subject: subject,\n body: body,\n wrapperAttachments: wrapperAttachments,\n },\n parentEntity: parentEntity,\n parentEntityId: parentEntityId,\n };\n\n // Send using queue if the developer has explicitly invoked with true.\n if (shouldQueueEmails === true) {\n this.sendEmailAsynchronously(message);\n }\n // If developer has not, however system config mandates that we send using queue, still we send.\n else if (shouldQueueEmails == false && this.settingService.getConfigValue<SolidCoreSetting>(\"shouldQueueEmails\") === true) {\n this.sendEmailAsynchronously(message);\n }\n // Else we send synch\n else {\n await this.sendEmailSynchronously(message);\n }\n }\n\n sendEmailAsynchronously(message: QueueMessage<any>) {\n const { to, subject, body } = message.payload;\n // this.notificationPublisherService.publish(message);\n // this.emailPublisher.publish(message);\n this.publisherFactory.publish(message, 'ApiEmailQueuePublisher');\n this.logger.debug(`Queueing email to ${to} with subject ${subject} and body ${body}`);\n }\n\n async sendEmailSynchronously(message: QueueMessage<any>): Promise<void> {\n const { from, to, subject, body, wrapperAttachments }: { from: string, to: string, subject: string, body: string, wrapperAttachments: MailAttachmentWrapper[] } = message.payload;\n const emailData = {\n Recipients: {\n To: [to]\n },\n Content: {\n Body: [\n {\n ContentType: \"HTML\", //ContentType Text version is handled by elastic email automatically through a config setting\n Charset: \"utf-8\",\n Content: body\n }\n ],\n From: from,\n Subject: subject\n }\n };\n\n // Handle relative attachments i.e attachments that are uploaded to the email service.\n const relativeAttachments = wrapperAttachments.filter(wrapperAttachment => wrapperAttachment.relativePath);\n if (relativeAttachments.length > 0) {\n emailData.Content['AttachFiles'] = relativeAttachments.map(attachment => attachment.relativePath);\n }\n\n const binaryAttachments = wrapperAttachments.filter(wrapperAttachment => wrapperAttachment.attachment);\n if (binaryAttachments.length > 0) {\n //FIXME Replace this with actual attachment.\n // const dummyAttachmentBuffer = await this.dummyAttachment();\n // emailData.Content['Attachments'] = [{\n // \"BinaryContent\": dummyAttachmentBuffer.toString('base64'),\n // \"Name\": \"Invoice.pdf\", \n // }];\n const attachments = [];\n for (const wrapperAttachment of binaryAttachments) {\n const attachment = await this.toMessageAttachment(wrapperAttachment.attachment, wrapperAttachment.attachment.templateParams);\n attachments.push(attachment);\n }\n emailData.Content['Attachments'] = attachments;\n }\n\n const callback = (error, _data, _response) => {\n if (error) {\n this.logger.debug(`Error while sending email to ${to} with subject ${subject}`, error);\n } else {\n this.logger.debug(`Sending email to ${to} with subject ${subject}`);\n }\n };\n\n this.emailsApi.emailsTransactionalPost(emailData, callback);\n }\n\n private async toAttachmentWrapper(attachment: EmailAttachment, templateParams: any): Promise<MailAttachmentWrapper> {\n const attachmentWrapper: MailAttachmentWrapper = {}\n if (attachment.template) {\n attachmentWrapper.attachment = {\n filename: attachment.displayName,\n templatePath: attachment.template,\n templateParams: templateParams,\n }\n } else {\n attachmentWrapper.relativePath = attachment.relativePath\n }\n return attachmentWrapper;\n }\n\n private async toMessageAttachment(attachment: MailAttachment, templateParams: any): Promise<any> {\n const attachmentContent = await this.getAttachmentAsPDF(attachment.templatePath, templateParams);\n return {\n \"BinaryContent\": attachmentContent.toString('base64'),\n \"Name\": attachment.filename,\n }\n }\n\n private async getAttachmentAsPDF(attachmentTemplatePath: string, templateParams: any): Promise<Buffer> {\n const template = await this.fileService.readFile(attachmentTemplatePath)\n const bodyTemplate = Handlebars.compile(template);\n const html = bodyTemplate(templateParams);\n const pdfBuffer = await this.pdfService.generatePdf(html);\n const buffer = Buffer.from(pdfBuffer);\n return buffer;\n }\n}"]}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import { ConfigType } from '@nestjs/config';
|
|
2
|
-
import commonConfig from 'src/config/common.config';
|
|
3
1
|
import { QueueMessage } from 'src/interfaces/mq';
|
|
4
2
|
import { IMail, MailAttachment, MailAttachmentWrapper } from "../../interfaces";
|
|
5
3
|
import { EmailTemplateService } from '../email-template.service';
|
|
6
4
|
import { PublisherFactory } from '../queues/publisher-factory.service';
|
|
5
|
+
import { SettingService } from '../setting.service';
|
|
7
6
|
export declare class SMTPEMailService implements IMail {
|
|
8
|
-
private readonly commonConfiguration;
|
|
9
7
|
private readonly publisherFactory;
|
|
10
8
|
private readonly emailTemplateService;
|
|
9
|
+
private readonly settingService;
|
|
11
10
|
private readonly logger;
|
|
12
11
|
private readonly transporter;
|
|
13
|
-
constructor(
|
|
12
|
+
constructor(publisherFactory: PublisherFactory<any>, emailTemplateService: EmailTemplateService, settingService: SettingService);
|
|
14
13
|
sendEmailUsingTemplate(to: string, templateName: string, templateParams: any, shouldQueueEmails?: boolean, wrapperAttachments?: MailAttachmentWrapper[], attachments?: MailAttachment[], parentEntity?: any, parentEntityId?: any, cc?: string[], bcc?: string[], from?: string): Promise<any>;
|
|
15
14
|
sendEmail(to: string, subject: string, body: string, shouldQueueEmails?: boolean, wrapperAttachments?: MailAttachmentWrapper[], attachments?: MailAttachment[], parentEntity?: any, parentEntityId?: any, cc?: string[], bcc?: string[], from?: string): Promise<any>;
|
|
16
15
|
sendEmailAsynchronously(message: any): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smtp-email.service.d.ts","sourceRoot":"","sources":["../../../src/services/mail/smtp-email.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"smtp-email.service.d.ts","sourceRoot":"","sources":["../../../src/services/mail/smtp-email.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpD,qBAEa,gBAAiB,YAAW,KAAK;IAOtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAM;gBAKb,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACvC,oBAAoB,EAAE,oBAAoB,EAC1C,cAAc,EAAE,cAAc;IAqB7C,sBAAsB,CACxB,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,GAAG,EACnB,iBAAiB,UAAQ,EACzB,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,EAC5C,WAAW,CAAC,EAAE,cAAc,EAAE,EAC9B,YAAY,CAAC,EAAE,GAAG,EAClB,cAAc,CAAC,EAAE,GAAG,EACpB,EAAE,CAAC,EAAE,MAAM,EAAE,EACb,GAAG,CAAC,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE,MAAM;IAoBX,SAAS,CACX,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,iBAAiB,UAAQ,EACzB,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,EAC5C,WAAW,CAAC,EAAE,cAAc,EAAE,EAC9B,YAAY,CAAC,EAAE,GAAG,EAClB,cAAc,CAAC,EAAE,GAAG,EACpB,EAAE,CAAC,EAAE,MAAM,EAAE,EACb,GAAG,CAAC,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE,MAAM;IA8BX,uBAAuB,CAAC,OAAO,KAAA;IAM/B,sBAAsB,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC;CA4C1D"}
|
|
@@ -8,9 +8,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
-
};
|
|
14
11
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
13
|
};
|
|
@@ -19,24 +16,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
19
16
|
exports.SMTPEMailService = void 0;
|
|
20
17
|
const common_1 = require("@nestjs/common");
|
|
21
18
|
const handlebars_1 = __importDefault(require("handlebars"));
|
|
22
|
-
const common_config_1 = __importDefault(require("../../config/common.config"));
|
|
23
19
|
const mail_provider_decorator_1 = require("../../decorators/mail-provider.decorator");
|
|
24
20
|
const email_template_service_1 = require("../email-template.service");
|
|
25
21
|
const publisher_factory_service_1 = require("../queues/publisher-factory.service");
|
|
22
|
+
const setting_service_1 = require("../setting.service");
|
|
26
23
|
const nodemailer = require("nodemailer");
|
|
27
24
|
let SMTPEMailService = SMTPEMailService_1 = class SMTPEMailService {
|
|
28
|
-
constructor(
|
|
29
|
-
this.commonConfiguration = commonConfiguration;
|
|
25
|
+
constructor(publisherFactory, emailTemplateService, settingService) {
|
|
30
26
|
this.publisherFactory = publisherFactory;
|
|
31
27
|
this.emailTemplateService = emailTemplateService;
|
|
28
|
+
this.settingService = settingService;
|
|
32
29
|
this.logger = new common_1.Logger(SMTPEMailService_1.name);
|
|
30
|
+
const host = process.env.COMMON_SMTP_EMAIL_SMTP_HOST;
|
|
31
|
+
const port = +(process.env.COMMON_SMTP_EMAIL_SMTP_PORT ?? 587);
|
|
32
|
+
const username = process.env.COMMON_SMTP_EMAIL_USERNAME;
|
|
33
|
+
const password = process.env.COMMON_SMTP_EMAIL_PASSWORD;
|
|
34
|
+
const from = process.env.COMMON_SMTP_EMAIL_FROM ?? process.env.COMMON_EMAIL_FROM;
|
|
33
35
|
this.transporter = nodemailer.createTransport({
|
|
34
|
-
host:
|
|
35
|
-
port:
|
|
36
|
-
secure:
|
|
36
|
+
host: host,
|
|
37
|
+
port: port,
|
|
38
|
+
secure: port === 465,
|
|
37
39
|
auth: {
|
|
38
|
-
user:
|
|
39
|
-
pass:
|
|
40
|
+
user: username,
|
|
41
|
+
pass: password
|
|
40
42
|
}
|
|
41
43
|
});
|
|
42
44
|
}
|
|
@@ -54,7 +56,7 @@ let SMTPEMailService = SMTPEMailService_1 = class SMTPEMailService {
|
|
|
54
56
|
async sendEmail(to, subject, body, shouldQueueEmails = false, wrapperAttachments, attachments, parentEntity, parentEntityId, cc, bcc, from) {
|
|
55
57
|
const message = {
|
|
56
58
|
payload: {
|
|
57
|
-
from: from || this.
|
|
59
|
+
from: from || this.settingService.getConfigValue("smtpMailFrom"),
|
|
58
60
|
to: to,
|
|
59
61
|
subject: subject,
|
|
60
62
|
body: body,
|
|
@@ -68,7 +70,7 @@ let SMTPEMailService = SMTPEMailService_1 = class SMTPEMailService {
|
|
|
68
70
|
if (shouldQueueEmails === true) {
|
|
69
71
|
return this.sendEmailAsynchronously(message);
|
|
70
72
|
}
|
|
71
|
-
else if (shouldQueueEmails == false && this.
|
|
73
|
+
else if (shouldQueueEmails == false && this.settingService.getConfigValue("shouldQueueEmails") === true) {
|
|
72
74
|
return this.sendEmailAsynchronously(message);
|
|
73
75
|
}
|
|
74
76
|
else {
|
|
@@ -83,7 +85,7 @@ let SMTPEMailService = SMTPEMailService_1 = class SMTPEMailService {
|
|
|
83
85
|
async sendEmailSynchronously(message) {
|
|
84
86
|
let from;
|
|
85
87
|
const { to, subject, body, attachments = [], cc, bcc } = message.payload;
|
|
86
|
-
const envFrom = this.
|
|
88
|
+
const envFrom = this.settingService.getConfigValue("smtpMailFrom");
|
|
87
89
|
if (envFrom) {
|
|
88
90
|
from = envFrom;
|
|
89
91
|
}
|
|
@@ -120,8 +122,8 @@ exports.SMTPEMailService = SMTPEMailService;
|
|
|
120
122
|
exports.SMTPEMailService = SMTPEMailService = SMTPEMailService_1 = __decorate([
|
|
121
123
|
(0, common_1.Injectable)(),
|
|
122
124
|
(0, mail_provider_decorator_1.MailProvider)(),
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
125
|
+
__metadata("design:paramtypes", [publisher_factory_service_1.PublisherFactory,
|
|
126
|
+
email_template_service_1.EmailTemplateService,
|
|
127
|
+
setting_service_1.SettingService])
|
|
126
128
|
], SMTPEMailService);
|
|
127
129
|
//# sourceMappingURL=smtp-email.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smtp-email.service.js","sourceRoot":"","sources":["../../../src/services/mail/smtp-email.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable, Logger } from '@nestjs/common';\nimport { ConfigType } from '@nestjs/config';\nimport Handlebars from \"handlebars\";\nimport commonConfig from 'src/config/common.config';\nimport { MailProvider } from 'src/decorators/mail-provider.decorator';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport { IMail, MailAttachment, MailAttachmentWrapper } from \"../../interfaces\";\nimport { EmailTemplateService } from '../email-template.service';\nimport { PublisherFactory } from '../queues/publisher-factory.service';\n\nconst nodemailer = require(\"nodemailer\");\n\n@Injectable()\n@MailProvider()\nexport class SMTPEMailService implements IMail {\n private readonly logger = new Logger(SMTPEMailService.name);\n private readonly transporter: any;\n\n constructor(\n @Inject(commonConfig.KEY)\n private readonly commonConfiguration: ConfigType<typeof commonConfig>,\n // private readonly emailPublisher: EmailQueuePublisher,\n // private readonly emailDbPublisher: EmailQueueDbPublisher,\n private readonly publisherFactory: PublisherFactory<any>,\n private readonly emailTemplateService: EmailTemplateService,\n ) {\n this.transporter = nodemailer.createTransport({\n host: this.commonConfiguration.smtpMail.host,\n port: this.commonConfiguration.smtpMail.port,\n secure: this.commonConfiguration.smtpMail.port === 465,\n auth: {\n user: this.commonConfiguration.smtpMail.username,\n pass: this.commonConfiguration.smtpMail.password\n }\n });\n }\n\n async sendEmailUsingTemplate(\n to: string,\n templateName: string,\n templateParams: any,\n shouldQueueEmails = false,\n wrapperAttachments?: MailAttachmentWrapper[],\n attachments?: MailAttachment[],\n parentEntity?: any,\n parentEntityId?: any,\n cc?: string[],\n bcc?: string[],\n from?: string\n ) {\n // Load template and evaluate it.\n const emailTemplate = await this.emailTemplateService.findOneByName(templateName);\n if (!emailTemplate) {\n throw new Error(`Invalid template name ${templateName}`);\n }\n\n // Evaluate the body template.\n const bodyTemplate = Handlebars.compile(emailTemplate.body);\n const body = bodyTemplate(templateParams);\n\n // Evaluate the subject template \n const subjectTemplate = Handlebars.compile(emailTemplate.subject);\n const subject = subjectTemplate(templateParams);\n\n // Finally send the email.\n return await this.sendEmail(to, subject, body, shouldQueueEmails, wrapperAttachments, attachments, parentEntity, parentEntityId, cc, bcc, from);\n }\n\n async sendEmail(\n to: string,\n subject: string,\n body: string,\n shouldQueueEmails = false,\n wrapperAttachments?: MailAttachmentWrapper[],\n attachments?: MailAttachment[],\n parentEntity?: any,\n parentEntityId?: any,\n cc?: string[],\n bcc?: string[],\n from?: string\n ) {\n const message = {\n payload: {\n from: from || this.commonConfiguration.smtpMail.from,\n to: to,\n subject: subject,\n body: body,\n attachments: attachments,\n cc: cc,\n bcc: bcc,\n },\n parentEntity: parentEntity,\n parentEntityId: parentEntityId,\n };\n\n // Send using queue if the developer has explicitly invoked with true.\n if (shouldQueueEmails === true) {\n return this.sendEmailAsynchronously(message);\n }\n // If developer has not, however system config mandates that we send using queue, still we send.\n else if (shouldQueueEmails == false && this.commonConfiguration.shouldQueueEmails === true) {\n return this.sendEmailAsynchronously(message);\n }\n // Else we send synchronously\n else {\n return await this.sendEmailSynchronously(message);\n }\n }\n\n async sendEmailAsynchronously(message) {\n const { to, subject, body } = message.payload;\n this.logger.debug(`Queueing email to ${to} with subject ${subject} and body ${body}`);\n return this.publisherFactory.publish(message, 'SmtpEmailQueuePublisher');\n }\n\n async sendEmailSynchronously(message: QueueMessage<any>) {\n let from;\n const { to, subject, body, attachments = [], cc, bcc } = message.payload;\n\n const envFrom = this.commonConfiguration.smtpMail.from;\n if (envFrom) {\n from = envFrom;\n }\n\n // if any of the required fields are missing, throw an error.\n if (!from || !to || !subject || !body) {\n this.logger.error(`Required fields are missing in the email message: ${JSON.stringify(message.payload)}`);\n return;\n }\n\n const attachmentsList = attachments?.map((attachment: MailAttachment) => {\n const attachmentEntry = {\n filename: attachment.filename,\n contentType: attachment.contentType,\n }\n if (attachment.path) {\n attachmentEntry['path'] = attachment.path;\n }\n if (attachment.content) {\n attachmentEntry['content'] = attachment.content;\n }\n return attachmentEntry;\n }) || [];\n\n // throw new Error('Random error....');\n const r = await this.transporter.sendMail({\n from: from,\n to: to,\n cc: cc,\n bcc: bcc,\n subject: subject,\n html: body,\n attachments: attachmentsList,\n });\n // this.logger.debug(`Sending email to ${to} with subject ${subject} and body ${body}`);\n // this.logger.debug(`Sending email to ${to} with subject ${subject}`);\n\n return r;\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"smtp-email.service.js","sourceRoot":"","sources":["../../../src/services/mail/smtp-email.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable, Logger } from '@nestjs/common';\nimport { ConfigType } from '@nestjs/config';\nimport Handlebars from \"handlebars\";\nimport { MailProvider } from 'src/decorators/mail-provider.decorator';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport { IMail, MailAttachment, MailAttachmentWrapper } from \"../../interfaces\";\nimport { EmailTemplateService } from '../email-template.service';\nimport { PublisherFactory } from '../queues/publisher-factory.service';\nimport { SettingService } from '../setting.service';\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\nconst nodemailer = require(\"nodemailer\");\n\n@Injectable()\n@MailProvider()\nexport class SMTPEMailService implements IMail {\n private readonly logger = new Logger(SMTPEMailService.name);\n private readonly transporter: any;\n\n constructor(\n // private readonly emailPublisher: EmailQueuePublisher,\n // private readonly emailDbPublisher: EmailQueueDbPublisher,\n private readonly publisherFactory: PublisherFactory<any>,\n private readonly emailTemplateService: EmailTemplateService,\n private readonly settingService: SettingService\n\n ) {\n\n const host = process.env.COMMON_SMTP_EMAIL_SMTP_HOST;\n const port = +(process.env.COMMON_SMTP_EMAIL_SMTP_PORT ?? 587);\n const username = process.env.COMMON_SMTP_EMAIL_USERNAME;\n const password = process.env.COMMON_SMTP_EMAIL_PASSWORD;\n const from = process.env.COMMON_SMTP_EMAIL_FROM ?? process.env.COMMON_EMAIL_FROM;\n\n this.transporter = nodemailer.createTransport({\n host: host,\n port: port,\n secure: port === 465,\n auth: {\n user: username,\n pass: password\n }\n });\n }\n\n async sendEmailUsingTemplate(\n to: string,\n templateName: string,\n templateParams: any,\n shouldQueueEmails = false,\n wrapperAttachments?: MailAttachmentWrapper[],\n attachments?: MailAttachment[],\n parentEntity?: any,\n parentEntityId?: any,\n cc?: string[],\n bcc?: string[],\n from?: string\n ) {\n // Load template and evaluate it.\n const emailTemplate = await this.emailTemplateService.findOneByName(templateName);\n if (!emailTemplate) {\n throw new Error(`Invalid template name ${templateName}`);\n }\n\n // Evaluate the body template.\n const bodyTemplate = Handlebars.compile(emailTemplate.body);\n const body = bodyTemplate(templateParams);\n\n // Evaluate the subject template \n const subjectTemplate = Handlebars.compile(emailTemplate.subject);\n const subject = subjectTemplate(templateParams);\n\n // Finally send the email.\n return await this.sendEmail(to, subject, body, shouldQueueEmails, wrapperAttachments, attachments, parentEntity, parentEntityId, cc, bcc, from);\n }\n\n async sendEmail(\n to: string,\n subject: string,\n body: string,\n shouldQueueEmails = false,\n wrapperAttachments?: MailAttachmentWrapper[],\n attachments?: MailAttachment[],\n parentEntity?: any,\n parentEntityId?: any,\n cc?: string[],\n bcc?: string[],\n from?: string\n ) {\n const message = {\n payload: {\n from: from || this.settingService.getConfigValue<SolidCoreSetting>(\"smtpMailFrom\"),\n to: to,\n subject: subject,\n body: body,\n attachments: attachments,\n cc: cc,\n bcc: bcc,\n },\n parentEntity: parentEntity,\n parentEntityId: parentEntityId,\n };\n\n // Send using queue if the developer has explicitly invoked with true.\n if (shouldQueueEmails === true) {\n return this.sendEmailAsynchronously(message);\n }\n // If developer has not, however system config mandates that we send using queue, still we send.\n else if (shouldQueueEmails == false && this.settingService.getConfigValue<SolidCoreSetting>(\"shouldQueueEmails\") === true) {\n return this.sendEmailAsynchronously(message);\n }\n // Else we send synchronously\n else {\n return await this.sendEmailSynchronously(message);\n }\n }\n\n async sendEmailAsynchronously(message) {\n const { to, subject, body } = message.payload;\n this.logger.debug(`Queueing email to ${to} with subject ${subject} and body ${body}`);\n return this.publisherFactory.publish(message, 'SmtpEmailQueuePublisher');\n }\n\n async sendEmailSynchronously(message: QueueMessage<any>) {\n let from;\n const { to, subject, body, attachments = [], cc, bcc } = message.payload;\n\n const envFrom = this.settingService.getConfigValue<SolidCoreSetting>(\"smtpMailFrom\");\n if (envFrom) {\n from = envFrom;\n }\n\n // if any of the required fields are missing, throw an error.\n if (!from || !to || !subject || !body) {\n this.logger.error(`Required fields are missing in the email message: ${JSON.stringify(message.payload)}`);\n return;\n }\n\n const attachmentsList = attachments?.map((attachment: MailAttachment) => {\n const attachmentEntry = {\n filename: attachment.filename,\n contentType: attachment.contentType,\n }\n if (attachment.path) {\n attachmentEntry['path'] = attachment.path;\n }\n if (attachment.content) {\n attachmentEntry['content'] = attachment.content;\n }\n return attachmentEntry;\n }) || [];\n\n // throw new Error('Random error....');\n const r = await this.transporter.sendMail({\n from: from,\n to: to,\n cc: cc,\n bcc: bcc,\n subject: subject,\n html: body,\n attachments: attachmentsList,\n });\n // this.logger.debug(`Sending email to ${to} with subject ${subject} and body ${body}`);\n // this.logger.debug(`Sending email to ${to} with subject ${subject}`);\n\n return r;\n }\n}"]}
|