@solidxai/core 0.1.10-beta.2 → 0.1.10-beta.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +18 -0
- package/CURRENT_PROMPT +6 -0
- package/dist/commands/refresh-model.command.d.ts +1 -7
- package/dist/commands/refresh-model.command.d.ts.map +1 -1
- package/dist/commands/refresh-model.command.js +4 -49
- package/dist/commands/refresh-model.command.js.map +1 -1
- package/dist/commands/refresh-module.command.d.ts +0 -2
- package/dist/commands/refresh-module.command.d.ts.map +1 -1
- package/dist/commands/refresh-module.command.js +3 -16
- package/dist/commands/refresh-module.command.js.map +1 -1
- package/dist/commands/test-data.command.d.ts +2 -0
- package/dist/commands/test-data.command.d.ts.map +1 -1
- package/dist/commands/test-data.command.js +32 -6
- package/dist/commands/test-data.command.js.map +1 -1
- package/dist/controllers/action-metadata.controller.js +1 -1
- package/dist/controllers/action-metadata.controller.js.map +1 -1
- package/dist/controllers/chatter-message.controller.d.ts +2 -0
- package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
- package/dist/controllers/chatter-message.controller.js +17 -0
- package/dist/controllers/chatter-message.controller.js.map +1 -1
- package/dist/controllers/facebook-authentication.controller.js +1 -1
- package/dist/controllers/facebook-authentication.controller.js.map +1 -1
- package/dist/controllers/google-authentication.controller.js +1 -1
- package/dist/controllers/google-authentication.controller.js.map +1 -1
- package/dist/controllers/gupshup-webhook.controller.d.ts +11 -0
- package/dist/controllers/gupshup-webhook.controller.d.ts.map +1 -0
- package/dist/controllers/gupshup-webhook.controller.js +87 -0
- package/dist/controllers/gupshup-webhook.controller.js.map +1 -0
- package/dist/controllers/mcp-audit-log.controller.d.ts +35 -0
- package/dist/controllers/mcp-audit-log.controller.d.ts.map +1 -0
- package/dist/controllers/mcp-audit-log.controller.js +147 -0
- package/dist/controllers/mcp-audit-log.controller.js.map +1 -0
- package/dist/controllers/menu-item-metadata.controller.js +1 -1
- package/dist/controllers/menu-item-metadata.controller.js.map +1 -1
- package/dist/controllers/meta-cloud-whatsapp-webhook.controller.d.ts +16 -0
- package/dist/controllers/meta-cloud-whatsapp-webhook.controller.d.ts.map +1 -0
- package/dist/controllers/meta-cloud-whatsapp-webhook.controller.js +133 -0
- package/dist/controllers/meta-cloud-whatsapp-webhook.controller.js.map +1 -0
- package/dist/controllers/microsoft-authentication.controller.js +1 -1
- package/dist/controllers/microsoft-authentication.controller.js.map +1 -1
- package/dist/controllers/model-metadata.controller.d.ts +1 -1
- package/dist/controllers/model-metadata.controller.js +2 -2
- package/dist/controllers/model-metadata.controller.js.map +1 -1
- package/dist/controllers/module-metadata.controller.js +1 -1
- package/dist/controllers/module-metadata.controller.js.map +1 -1
- package/dist/controllers/mq-message-queue.controller.js +1 -1
- package/dist/controllers/mq-message-queue.controller.js.map +1 -1
- package/dist/controllers/mq-message.controller.js +1 -1
- package/dist/controllers/mq-message.controller.js.map +1 -1
- package/dist/controllers/view-metadata.controller.js +1 -1
- package/dist/controllers/view-metadata.controller.js.map +1 -1
- package/dist/dtos/create-mcp-audit-log.dto.d.ts +19 -0
- package/dist/dtos/create-mcp-audit-log.dto.d.ts.map +1 -0
- package/dist/dtos/create-mcp-audit-log.dto.js +118 -0
- package/dist/dtos/create-mcp-audit-log.dto.js.map +1 -0
- package/dist/dtos/update-chatter-note-message.dto.d.ts +5 -0
- package/dist/dtos/update-chatter-note-message.dto.d.ts.map +1 -0
- package/dist/dtos/update-chatter-note-message.dto.js +34 -0
- package/dist/dtos/update-chatter-note-message.dto.js.map +1 -0
- package/dist/dtos/update-mcp-audit-log.dto.d.ts +19 -0
- package/dist/dtos/update-mcp-audit-log.dto.d.ts.map +1 -0
- package/dist/dtos/update-mcp-audit-log.dto.js +117 -0
- package/dist/dtos/update-mcp-audit-log.dto.js.map +1 -0
- package/dist/dtos/update-user.dto.d.ts +1 -0
- package/dist/dtos/update-user.dto.d.ts.map +1 -1
- package/dist/dtos/update-user.dto.js +7 -1
- package/dist/dtos/update-user.dto.js.map +1 -1
- package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message-details.entity.js +0 -1
- package/dist/entities/chatter-message-details.entity.js.map +1 -1
- package/dist/entities/mcp-audit-log.entity.d.ts +19 -0
- package/dist/entities/mcp-audit-log.entity.d.ts.map +1 -0
- package/dist/entities/mcp-audit-log.entity.js +90 -0
- package/dist/entities/mcp-audit-log.entity.js.map +1 -0
- package/dist/entities/user.entity.js +1 -0
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/factories/whatsapp.factory.d.ts.map +1 -1
- package/dist/factories/whatsapp.factory.js +13 -11
- package/dist/factories/whatsapp.factory.js.map +1 -1
- package/dist/helpers/bootstrap.helper.d.ts +1 -0
- package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
- package/dist/helpers/bootstrap.helper.js +8 -3
- package/dist/helpers/bootstrap.helper.js.map +1 -1
- package/dist/helpers/command.service.d.ts +1 -0
- package/dist/helpers/command.service.d.ts.map +1 -1
- package/dist/helpers/command.service.js +1 -0
- package/dist/helpers/command.service.js.map +1 -1
- package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js.map +1 -1
- package/dist/helpers/module-metadata-helper.service.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +1 -2
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/chatter-queue-subscriber-database.service.js +3 -3
- package/dist/jobs/database/chatter-queue-subscriber-database.service.js.map +1 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
- package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.js +3 -3
- package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.js.map +1 -1
- package/dist/jobs/redis/chatter-queue-subscriber-redis.service.d.ts.map +1 -1
- package/dist/jobs/redis/chatter-queue-subscriber-redis.service.js +3 -3
- package/dist/jobs/redis/chatter-queue-subscriber-redis.service.js.map +1 -1
- package/dist/listeners/user-registration.listener.d.ts +5 -2
- package/dist/listeners/user-registration.listener.d.ts.map +1 -1
- package/dist/listeners/user-registration.listener.js +37 -4
- package/dist/listeners/user-registration.listener.js.map +1 -1
- package/dist/repository/mcp-audit-log.repository.d.ts +12 -0
- package/dist/repository/mcp-audit-log.repository.d.ts.map +1 -0
- package/dist/repository/mcp-audit-log.repository.js +34 -0
- package/dist/repository/mcp-audit-log.repository.js.map +1 -0
- package/dist/repository/security-rule.repository.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/module-test-data.service.d.ts +9 -0
- package/dist/seeders/module-test-data.service.d.ts.map +1 -1
- package/dist/seeders/module-test-data.service.js +155 -18
- package/dist/seeders/module-test-data.service.js.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +506 -49
- package/dist/services/authentication.service.d.ts +6 -1
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +145 -15
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts +13 -4
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +117 -37
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/csv.service.js.map +1 -1
- package/dist/services/dashboard.service.js.map +1 -1
- package/dist/services/database/database-bootstrap.service.js.map +1 -1
- package/dist/services/excel.service.js.map +1 -1
- package/dist/services/export-transaction.service.js.map +1 -1
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/fixtures.service.js.map +1 -1
- package/dist/services/import-transaction.service.js.map +1 -1
- package/dist/services/list-of-values.service.js.map +1 -1
- package/dist/services/mcp-audit-log.service.d.ts +12 -0
- package/dist/services/mcp-audit-log.service.d.ts.map +1 -0
- package/dist/services/mcp-audit-log.service.js +38 -0
- package/dist/services/mcp-audit-log.service.js.map +1 -0
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts +1 -0
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +11 -0
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.d.ts +1 -0
- package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.js +6 -0
- package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +4 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +24 -24
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/module-metadata.service.d.ts +4 -1
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +19 -2
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/queues/database-publisher.service.js +3 -3
- package/dist/services/queues/database-publisher.service.js.map +1 -1
- package/dist/services/queues/database-subscriber.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-publisher.service.js +3 -3
- package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/services/queues/redis-publisher.service.d.ts.map +1 -1
- package/dist/services/queues/redis-publisher.service.js +4 -1
- package/dist/services/queues/redis-publisher.service.js.map +1 -1
- package/dist/services/queues/redis-subscriber.service.js.map +1 -1
- package/dist/services/role-metadata.service.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
- package/dist/services/settings/default-settings-provider.service.d.ts +232 -8
- package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
- package/dist/services/settings/default-settings-provider.service.js +119 -4
- package/dist/services/settings/default-settings-provider.service.js.map +1 -1
- package/dist/services/sms/TwilioSMSService.js.map +1 -1
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/services/user-activity-history.service.js.map +1 -1
- package/dist/services/user.service.js +1 -1
- package/dist/services/user.service.js.map +1 -1
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +17 -2
- package/dist/services/view-metadata.service.js.map +1 -1
- package/dist/services/whatsapp/GupshupOtpWhatsappService.d.ts +11 -0
- package/dist/services/whatsapp/GupshupOtpWhatsappService.d.ts.map +1 -0
- package/dist/services/whatsapp/GupshupOtpWhatsappService.js +127 -0
- package/dist/services/whatsapp/GupshupOtpWhatsappService.js.map +1 -0
- package/dist/services/whatsapp/MetaCloudWhatsappService.d.ts +17 -0
- package/dist/services/whatsapp/MetaCloudWhatsappService.d.ts.map +1 -0
- package/dist/services/whatsapp/MetaCloudWhatsappService.js +209 -0
- package/dist/services/whatsapp/MetaCloudWhatsappService.js.map +1 -0
- package/dist/solid-core.module.d.ts +2 -2
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +22 -6
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
- package/dist/subscribers/security-rule.subscriber.d.ts.map +1 -1
- package/dist/subscribers/security-rule.subscriber.js.map +1 -1
- package/dist/subscribers/view-metadata.subscriber.js.map +1 -1
- package/dist/testing/adapters/ui/playwright-adapter.d.ts +1 -0
- package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
- package/dist/testing/adapters/ui/playwright-adapter.js +3 -0
- package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
- package/dist/testing/core/testing-engine.js.map +1 -1
- package/dist/testing/reporter/console-reporter.d.ts +10 -0
- package/dist/testing/reporter/console-reporter.d.ts.map +1 -1
- package/dist/testing/reporter/console-reporter.js +21 -0
- package/dist/testing/reporter/console-reporter.js.map +1 -1
- package/dist/testing/reporter/reporter.types.d.ts +7 -0
- package/dist/testing/reporter/reporter.types.d.ts.map +1 -1
- package/dist/testing/reporter/reporter.types.js.map +1 -1
- package/dist/testing/reporter/webhook-reporter.js.map +1 -1
- package/dist/testing/runner/run-from-metadata.d.ts.map +1 -1
- package/dist/testing/runner/run-from-metadata.js +20 -1
- package/dist/testing/runner/run-from-metadata.js.map +1 -1
- package/dist/testing/steps/ui/index.d.ts.map +1 -1
- package/dist/testing/steps/ui/index.js +2 -0
- package/dist/testing/steps/ui/index.js.map +1 -1
- package/dist/testing/steps/ui/manual.step.d.ts +3 -0
- package/dist/testing/steps/ui/manual.step.d.ts.map +1 -0
- package/dist/testing/steps/ui/manual.step.js +56 -0
- package/dist/testing/steps/ui/manual.step.js.map +1 -0
- package/dist/winston.logger.d.ts +5 -0
- package/dist/winston.logger.d.ts.map +1 -1
- package/dist/winston.logger.js +6 -4
- package/dist/winston.logger.js.map +1 -1
- package/package.json +8 -8
- package/src/commands/refresh-model.command.ts +6 -51
- package/src/commands/refresh-module.command.ts +3 -16
- package/src/commands/test-data.command.ts +29 -6
- package/src/controllers/action-metadata.controller.ts +1 -1
- package/src/controllers/chatter-message.controller.ts +12 -0
- package/src/controllers/facebook-authentication.controller.ts +1 -1
- package/src/controllers/google-authentication.controller.ts +1 -1
- package/src/controllers/gupshup-webhook.controller.ts +91 -0
- package/src/controllers/mcp-audit-log.controller.ts +70 -0
- package/src/controllers/menu-item-metadata.controller.ts +1 -1
- package/src/controllers/meta-cloud-whatsapp-webhook.controller.ts +155 -0
- package/src/controllers/microsoft-authentication.controller.ts +1 -1
- package/src/controllers/model-metadata.controller.ts +1 -1
- package/src/controllers/module-metadata.controller.ts +1 -1
- package/src/controllers/mq-message-queue.controller.ts +1 -1
- package/src/controllers/mq-message.controller.ts +1 -1
- package/src/controllers/view-metadata.controller.ts +1 -1
- package/src/dtos/create-mcp-audit-log.dto.ts +84 -0
- package/src/dtos/update-chatter-note-message.dto.ts +14 -0
- package/src/dtos/update-mcp-audit-log.dto.ts +83 -0
- package/src/dtos/update-user.dto.ts +4 -0
- package/src/entities/chatter-message-details.entity.ts +1 -2
- package/src/entities/mcp-audit-log.entity.ts +55 -0
- package/src/entities/user.entity.ts +1 -1
- package/src/factories/whatsapp.factory.ts +33 -32
- package/src/helpers/bootstrap.helper.ts +16 -6
- package/src/helpers/command.service.ts +2 -0
- package/src/helpers/field-crud-managers/BigIntFieldCrudManager.ts +1 -1
- package/src/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.ts +1 -1
- package/src/helpers/field-crud-managers/field-quality-check-fixes.md +208 -0
- package/src/helpers/module-metadata-helper.service.ts +1 -1
- package/src/index.ts +6 -0
- package/src/interfaces.ts +1 -3
- package/src/jobs/database/chatter-queue-subscriber-database.service.ts +4 -2
- package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +1 -1
- package/src/jobs/rabbitmq/chatter-queue-subscriber.service.ts +4 -2
- package/src/jobs/redis/chatter-queue-subscriber-redis.service.ts +10 -3
- package/src/listeners/user-registration.listener.ts +49 -6
- package/src/repository/mcp-audit-log.repository.ts +17 -0
- package/src/repository/security-rule.repository.ts +1 -1
- package/src/seeders/module-metadata-seeder.service.ts +4 -4
- package/src/seeders/module-test-data.service.ts +186 -17
- package/src/seeders/permission-metadata-seeder.service.ts +1 -1
- package/src/seeders/seed-data/solid-core-metadata.json +506 -49
- package/src/services/authentication.service.ts +267 -44
- package/src/services/chatter-message.service.ts +140 -40
- package/src/services/crud.service.ts +1 -1
- package/src/services/csv.service.ts +1 -1
- package/src/services/dashboard.service.ts +1 -1
- package/src/services/database/database-bootstrap.service.ts +1 -1
- package/src/services/excel.service.ts +1 -1
- package/src/services/export-transaction.service.ts +2 -2
- package/src/services/field-metadata.service.ts +1 -1
- package/src/services/fixtures.service.ts +2 -2
- package/src/services/import-transaction.service.ts +2 -2
- package/src/services/list-of-values.service.ts +1 -1
- package/src/services/mcp-audit-log.service.ts +19 -0
- package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +12 -0
- package/src/services/mediaStorageProviders/file-storage-provider.ts +8 -1
- package/src/services/model-metadata.service.ts +36 -34
- package/src/services/module-metadata.service.ts +19 -7
- package/src/services/queues/database-publisher.service.ts +4 -4
- package/src/services/queues/database-subscriber.service.ts +1 -1
- package/src/services/queues/rabbitmq-publisher.service.ts +7 -7
- package/src/services/queues/rabbitmq-subscriber.service.ts +8 -8
- package/src/services/queues/redis-publisher.service.ts +7 -4
- package/src/services/queues/redis-subscriber.service.ts +4 -4
- package/src/services/role-metadata.service.ts +1 -1
- package/src/services/scheduled-jobs/scheduler.service.ts +5 -5
- package/src/services/settings/default-settings-provider.service.ts +119 -4
- package/src/services/sms/TwilioSMSService.ts +2 -2
- package/src/services/solid-introspect.service.ts +2 -2
- package/src/services/user-activity-history.service.ts +1 -1
- package/src/services/user.service.ts +1 -1
- package/src/services/view-metadata.service.ts +25 -8
- package/src/services/whatsapp/GupshupOtpWhatsappService.ts +174 -0
- package/src/services/whatsapp/MetaCloudWhatsappService.ts +253 -0
- package/src/solid-core.module.ts +213 -196
- package/src/subscribers/computed-entity-field.subscriber.ts +1 -1
- package/src/subscribers/security-rule.subscriber.ts +8 -8
- package/src/subscribers/view-metadata.subscriber.ts +1 -1
- package/src/testing/README.md +55 -2
- package/src/testing/adapters/ui/playwright-adapter.ts +4 -0
- package/src/testing/core/testing-engine.ts +2 -2
- package/src/testing/reporter/console-reporter.ts +27 -0
- package/src/testing/reporter/reporter.types.ts +7 -0
- package/src/testing/reporter/webhook-reporter.ts +1 -1
- package/src/testing/runner/run-from-metadata.ts +19 -1
- package/src/testing/steps/ui/index.ts +2 -0
- package/src/testing/steps/ui/manual.step.ts +80 -0
- package/src/winston.logger.ts +5 -7
|
@@ -23,6 +23,7 @@ import { SettingService } from "./setting.service";
|
|
|
23
23
|
import { UserActivityHistoryService } from "./user-activity-history.service";
|
|
24
24
|
import { UserService } from "./user.service";
|
|
25
25
|
import { SmsFactory } from "../factories/sms.factory";
|
|
26
|
+
import { WhatsAppFactory } from "../factories/whatsapp.factory";
|
|
26
27
|
import { SolidRegistry } from "../helpers/solid-registry";
|
|
27
28
|
export declare class AuthenticationService {
|
|
28
29
|
private readonly userService;
|
|
@@ -33,6 +34,7 @@ export declare class AuthenticationService {
|
|
|
33
34
|
private readonly httpService;
|
|
34
35
|
private readonly mailServiceFactory;
|
|
35
36
|
private readonly smsFactory;
|
|
37
|
+
private readonly whatsAppFactory;
|
|
36
38
|
private readonly eventEmitter;
|
|
37
39
|
private readonly settingService;
|
|
38
40
|
private readonly roleMetadataService;
|
|
@@ -41,7 +43,7 @@ export declare class AuthenticationService {
|
|
|
41
43
|
private readonly dataSource;
|
|
42
44
|
private readonly solidRegistry;
|
|
43
45
|
private readonly logger;
|
|
44
|
-
constructor(userService: UserService, userRepository: UserRepository, hashingService: HashingService, jwtService: JwtService, refreshTokenIdsStorage: RefreshTokenIdsStorageService, httpService: HttpService, mailServiceFactory: MailFactory, smsFactory: SmsFactory, eventEmitter: EventEmitter2, settingService: SettingService, roleMetadataService: RoleMetadataService, userActivityHistoryService: UserActivityHistoryService, ssoCodeStorage: SsoCodeStorageService, dataSource: DataSource, solidRegistry: SolidRegistry);
|
|
46
|
+
constructor(userService: UserService, userRepository: UserRepository, hashingService: HashingService, jwtService: JwtService, refreshTokenIdsStorage: RefreshTokenIdsStorageService, httpService: HttpService, mailServiceFactory: MailFactory, smsFactory: SmsFactory, whatsAppFactory: WhatsAppFactory, eventEmitter: EventEmitter2, settingService: SettingService, roleMetadataService: RoleMetadataService, userActivityHistoryService: UserActivityHistoryService, ssoCodeStorage: SsoCodeStorageService, dataSource: DataSource, solidRegistry: SolidRegistry);
|
|
45
47
|
private getCompanyLogo;
|
|
46
48
|
resolveUser(username: string, email: string): Promise<User>;
|
|
47
49
|
updatePasswordDetails(user: User, newPassword: string): Promise<User>;
|
|
@@ -51,6 +53,7 @@ export declare class AuthenticationService {
|
|
|
51
53
|
private static readonly SIGNUP_DTO_KEYS;
|
|
52
54
|
signUp(signUpDto: SignUpDto & Record<string, any>, activeUser?: ActiveUserData): Promise<User>;
|
|
53
55
|
private performSignUp;
|
|
56
|
+
private handlePasswordlessSignupOtp;
|
|
54
57
|
signupForExtensionUser<T extends User>(signUpDto: SignUpDto, extensionUserDto: DeepPartial<T>, extensionUserRepo: Repository<T>): Promise<T>;
|
|
55
58
|
private populateForSignup;
|
|
56
59
|
private handlePostSignup;
|
|
@@ -69,6 +72,8 @@ export declare class AuthenticationService {
|
|
|
69
72
|
private createUser;
|
|
70
73
|
private assignRegistrationOtp;
|
|
71
74
|
private notifyUserOnOtpInitiateRegistration;
|
|
75
|
+
private normalizeWhatsAppDestination;
|
|
76
|
+
private sendOtpToWhatsappProvider;
|
|
72
77
|
otpConfirmRegistration(confirmSignUpDto: OTPConfirmOTPDto): Promise<{
|
|
73
78
|
active: boolean;
|
|
74
79
|
message: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authentication.service.d.ts","sourceRoot":"","sources":["../../src/services/authentication.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAY5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAO9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAEL,6BAA6B,EAC9B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAa3D,qBACa,qBAAqB;IAI9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAEnC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,0BAA0B;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc;IAG/B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"authentication.service.d.ts","sourceRoot":"","sources":["../../src/services/authentication.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,7 @@ const setting_service_1 = require("./setting.service");
|
|
|
38
38
|
const user_activity_history_service_1 = require("./user-activity-history.service");
|
|
39
39
|
const user_service_1 = require("./user.service");
|
|
40
40
|
const sms_factory_1 = require("../factories/sms.factory");
|
|
41
|
+
const whatsapp_factory_1 = require("../factories/whatsapp.factory");
|
|
41
42
|
const solid_registry_1 = require("../helpers/solid-registry");
|
|
42
43
|
var LoginProvider;
|
|
43
44
|
(function (LoginProvider) {
|
|
@@ -46,7 +47,7 @@ var LoginProvider;
|
|
|
46
47
|
LoginProvider["OTP"] = "otp";
|
|
47
48
|
})(LoginProvider || (LoginProvider = {}));
|
|
48
49
|
let AuthenticationService = AuthenticationService_1 = class AuthenticationService {
|
|
49
|
-
constructor(userService, userRepository, hashingService, jwtService, refreshTokenIdsStorage, httpService, mailServiceFactory, smsFactory, eventEmitter, settingService, roleMetadataService, userActivityHistoryService, ssoCodeStorage, dataSource, solidRegistry) {
|
|
50
|
+
constructor(userService, userRepository, hashingService, jwtService, refreshTokenIdsStorage, httpService, mailServiceFactory, smsFactory, whatsAppFactory, eventEmitter, settingService, roleMetadataService, userActivityHistoryService, ssoCodeStorage, dataSource, solidRegistry) {
|
|
50
51
|
this.userService = userService;
|
|
51
52
|
this.userRepository = userRepository;
|
|
52
53
|
this.hashingService = hashingService;
|
|
@@ -55,6 +56,7 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
|
|
|
55
56
|
this.httpService = httpService;
|
|
56
57
|
this.mailServiceFactory = mailServiceFactory;
|
|
57
58
|
this.smsFactory = smsFactory;
|
|
59
|
+
this.whatsAppFactory = whatsAppFactory;
|
|
58
60
|
this.eventEmitter = eventEmitter;
|
|
59
61
|
this.settingService = settingService;
|
|
60
62
|
this.roleMetadataService = roleMetadataService;
|
|
@@ -141,6 +143,8 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
|
|
|
141
143
|
userRoles.push(defaultRole);
|
|
142
144
|
}
|
|
143
145
|
await this.handlePostSignup(savedUser, userRoles, pwd, autoGeneratedPwd);
|
|
146
|
+
await this.handlePasswordlessSignupOtp(savedUser, signUpDto, autoGeneratedPwd, repo);
|
|
147
|
+
this.triggerRegistrationEvent(savedUser);
|
|
144
148
|
return savedUser;
|
|
145
149
|
}
|
|
146
150
|
catch (err) {
|
|
@@ -151,6 +155,24 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
|
|
|
151
155
|
throw err;
|
|
152
156
|
}
|
|
153
157
|
}
|
|
158
|
+
async handlePasswordlessSignupOtp(user, signUpDto, autoGeneratedPwd, repo) {
|
|
159
|
+
const isPasswordProvided = !!signUpDto.password;
|
|
160
|
+
const isAutoGeneratedPassword = !!autoGeneratedPwd;
|
|
161
|
+
if (isPasswordProvided || isAutoGeneratedPassword) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (!user.mobile) {
|
|
165
|
+
this.logger.warn(`Skipping passwordless signup OTP WhatsApp notification for user ${user.username}: mobile is missing.`);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const isPasswordlessRegistrationEnabled = await this.isPasswordlessRegistrationEnabled();
|
|
169
|
+
if (!isPasswordlessRegistrationEnabled) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
await this.assignRegistrationOtp(constants_1.PasswordlessRegistrationValidateWhatSources.MOBILE, user);
|
|
173
|
+
await repo.save(user);
|
|
174
|
+
await this.notifyUserOnOtpInitiateRegistration(user, constants_1.PasswordlessRegistrationValidateWhatSources.MOBILE);
|
|
175
|
+
}
|
|
154
176
|
async signupForExtensionUser(signUpDto, extensionUserDto, extensionUserRepo) {
|
|
155
177
|
const entity = extensionUserRepo.create(extensionUserDto);
|
|
156
178
|
return this.performSignUp(signUpDto, entity, extensionUserRepo);
|
|
@@ -360,7 +382,7 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
|
|
|
360
382
|
async notifyUserOnOtpInitiateRegistration(user, registrationValidationSource) {
|
|
361
383
|
const companyLogo = await this.getCompanyLogo();
|
|
362
384
|
if (registrationValidationSource ===
|
|
363
|
-
constants_1.
|
|
385
|
+
constants_1.PasswordlessRegistrationValidateWhatSources.EMAIL) {
|
|
364
386
|
const mailService = this.mailServiceFactory.getMailService();
|
|
365
387
|
mailService.sendEmailUsingTemplate(user.email, "otp-on-register", {
|
|
366
388
|
solidAppName: this.settingService.getConfigValue("appTitle"),
|
|
@@ -372,18 +394,85 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
|
|
|
372
394
|
}, this.settingService.getConfigValue("shouldQueueEmails"), null, null, "user", user.id);
|
|
373
395
|
}
|
|
374
396
|
if (registrationValidationSource ===
|
|
375
|
-
constants_1.
|
|
376
|
-
const
|
|
377
|
-
smsService.sendSMSUsingTemplate(user.mobile, "otp-on-register", {
|
|
397
|
+
constants_1.PasswordlessRegistrationValidateWhatSources.MOBILE) {
|
|
398
|
+
const templateParams = {
|
|
378
399
|
solidAppName: this.settingService.getConfigValue("appTitle"),
|
|
379
400
|
otp: user.mobileVerificationTokenOnRegistration,
|
|
380
401
|
mobileVerificationTokenOnRegistration: user.mobileVerificationTokenOnRegistration,
|
|
381
402
|
firstName: user.username,
|
|
382
403
|
fullName: user.fullName ? user.fullName : user.username,
|
|
383
404
|
companyLogoUrl: companyLogo,
|
|
384
|
-
}
|
|
405
|
+
};
|
|
406
|
+
const whatsappDestination = this.normalizeWhatsAppDestination(user.mobile);
|
|
407
|
+
const gupshupTemplateAppName = process.env.COMMON_GUPSHUP_APP_NAME || "Gupshup";
|
|
408
|
+
const whatsappTemplateId = this.settingService.getConfigValue("otpWhatsappTemplateId") || "common_otp";
|
|
409
|
+
const whatsappIndependentEnabled = this.settingService.getConfigValue("otpWhatsappIndependentEnabled") !== false;
|
|
410
|
+
let smsSent = false;
|
|
411
|
+
let whatsappSent = false;
|
|
412
|
+
let smsErrorMessage;
|
|
413
|
+
let whatsappErrorMessage;
|
|
414
|
+
this.logger.debug(`OTP SMS send attempt: destination=${user.mobile}, whatsappDestination=${whatsappDestination}`);
|
|
415
|
+
try {
|
|
416
|
+
const smsService = this.smsFactory.getSmsService();
|
|
417
|
+
await smsService.sendSMSUsingTemplate(user.mobile, "otp-on-register", templateParams, false);
|
|
418
|
+
smsSent = true;
|
|
419
|
+
}
|
|
420
|
+
catch (smsError) {
|
|
421
|
+
smsErrorMessage = smsError?.message;
|
|
422
|
+
this.logger.warn(`OTP SMS failed: destination=${user.mobile}, message=${smsErrorMessage}`);
|
|
423
|
+
}
|
|
424
|
+
if (whatsappIndependentEnabled) {
|
|
425
|
+
if (!whatsappDestination) {
|
|
426
|
+
whatsappErrorMessage = "Normalized WhatsApp destination is empty";
|
|
427
|
+
this.logger.error(`Independent OTP WhatsApp skipped: destination=${user.mobile}, message=${whatsappErrorMessage}`);
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
this.logger.debug(`Independent OTP WhatsApp send attempt: destination=${user.mobile}, whatsappDestination=${whatsappDestination}, templateId=${whatsappTemplateId}`);
|
|
431
|
+
try {
|
|
432
|
+
await this.sendOtpToWhatsappProvider(whatsappDestination, String(whatsappTemplateId), String(gupshupTemplateAppName), String(templateParams.otp || ""));
|
|
433
|
+
whatsappSent = true;
|
|
434
|
+
this.logger.log(`Independent OTP WhatsApp success: destination=${user.mobile}, whatsappDestination=${whatsappDestination}, templateId=${whatsappTemplateId}`);
|
|
435
|
+
}
|
|
436
|
+
catch (waError) {
|
|
437
|
+
whatsappErrorMessage = waError?.message;
|
|
438
|
+
this.logger.error(`Independent OTP WhatsApp failed: destination=${user.mobile}, whatsappDestination=${whatsappDestination}, templateId=${whatsappTemplateId}, message=${whatsappErrorMessage}`);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
if (!smsSent && !whatsappSent) {
|
|
443
|
+
throw new Error(`OTP delivery failed on both channels. smsError=${smsErrorMessage || "unknown"}, whatsappError=${whatsappErrorMessage || "disabled/unknown"}`);
|
|
444
|
+
}
|
|
385
445
|
}
|
|
386
446
|
}
|
|
447
|
+
normalizeWhatsAppDestination(rawMobile) {
|
|
448
|
+
const raw = (rawMobile || "").trim();
|
|
449
|
+
let sanitized = raw.replace(/[^\d+]/g, "");
|
|
450
|
+
if (sanitized.startsWith("00")) {
|
|
451
|
+
sanitized = `+${sanitized.slice(2)}`;
|
|
452
|
+
}
|
|
453
|
+
const defaultDialCode = String(this.settingService.getConfigValue("otpDefaultCountryDialCode") || "").replace(/\D/g, "");
|
|
454
|
+
if (sanitized.startsWith("+")) {
|
|
455
|
+
const e164Digits = sanitized.slice(1).replace(/\D/g, "");
|
|
456
|
+
if (e164Digits.length >= 8 && e164Digits.length <= 15) {
|
|
457
|
+
return e164Digits;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
const digits = sanitized.replace(/\D/g, "");
|
|
461
|
+
if (digits.length >= 11 && digits.length <= 15) {
|
|
462
|
+
return digits;
|
|
463
|
+
}
|
|
464
|
+
if (digits.length === 10 && defaultDialCode) {
|
|
465
|
+
return `${defaultDialCode}${digits}`;
|
|
466
|
+
}
|
|
467
|
+
return digits;
|
|
468
|
+
}
|
|
469
|
+
async sendOtpToWhatsappProvider(destination, templateId, appName, otp) {
|
|
470
|
+
const whatsappService = this.whatsAppFactory.getWhatsappService();
|
|
471
|
+
await whatsappService.sendWhatsAppMessage(destination, null, {
|
|
472
|
+
type: "text",
|
|
473
|
+
text: `${appName} OTP is ${otp}. It is valid for 10 mins.`,
|
|
474
|
+
});
|
|
475
|
+
}
|
|
387
476
|
async otpConfirmRegistration(confirmSignUpDto) {
|
|
388
477
|
const isPasswordlessRegistrationEnabled = await this.isPasswordlessRegistrationEnabled();
|
|
389
478
|
if (!isPasswordlessRegistrationEnabled) {
|
|
@@ -451,13 +540,13 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
|
|
|
451
540
|
async areAllPasswordlessRegistrationValidationSourcesVerified(user) {
|
|
452
541
|
const registrationValidationSource = this.resolvePasswordlessValidationSource();
|
|
453
542
|
if (registrationValidationSource ===
|
|
454
|
-
constants_1.
|
|
543
|
+
constants_1.PasswordlessRegistrationValidateWhatSources.EMAIL) {
|
|
455
544
|
if (!user.emailVerifiedOnRegistrationAt) {
|
|
456
545
|
return false;
|
|
457
546
|
}
|
|
458
547
|
}
|
|
459
548
|
if (registrationValidationSource ===
|
|
460
|
-
constants_1.
|
|
549
|
+
constants_1.PasswordlessRegistrationValidateWhatSources.MOBILE) {
|
|
461
550
|
if (!user.mobileVerifiedOnRegistrationAt) {
|
|
462
551
|
return false;
|
|
463
552
|
}
|
|
@@ -550,7 +639,7 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
|
|
|
550
639
|
const dummyOtp = this.getDummyOtpForUser(user);
|
|
551
640
|
if (!dummyOtp) {
|
|
552
641
|
await this.assignLoginOtp(user, type);
|
|
553
|
-
this.notifyUserOnOtpInititateLogin(user, type);
|
|
642
|
+
await this.notifyUserOnOtpInititateLogin(user, type);
|
|
554
643
|
}
|
|
555
644
|
return this.buildLoginOtpResponse(user, type);
|
|
556
645
|
}
|
|
@@ -630,15 +719,53 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
|
|
|
630
719
|
}, this.settingService.getConfigValue("shouldQueueEmails"), null, null, "user", user.id);
|
|
631
720
|
}
|
|
632
721
|
if (loginType === constants_1.PasswordlessLoginValidateWhatSources.MOBILE) {
|
|
633
|
-
const
|
|
634
|
-
smsService.sendSMSUsingTemplate(user.mobile, "otp-on-login", {
|
|
722
|
+
const templateParams = {
|
|
635
723
|
solidAppName: this.settingService.getConfigValue("appTitle"),
|
|
636
724
|
otp: user.mobileVerificationTokenOnLogin,
|
|
637
725
|
mobileVerificationTokenOnLogin: user.mobileVerificationTokenOnLogin,
|
|
638
726
|
firstName: user.username,
|
|
639
727
|
fullName: user.fullName ? user.fullName : user.username,
|
|
640
728
|
companyLogoUrl: companyLogo,
|
|
641
|
-
}
|
|
729
|
+
};
|
|
730
|
+
const whatsappDestination = this.normalizeWhatsAppDestination(user.mobile);
|
|
731
|
+
const gupshupTemplateAppName = process.env.COMMON_GUPSHUP_APP_NAME || "Gupshup";
|
|
732
|
+
const whatsappTemplateId = this.settingService.getConfigValue("otpWhatsappTemplateId") || "common_otp";
|
|
733
|
+
const whatsappIndependentEnabled = this.settingService.getConfigValue("otpWhatsappIndependentEnabled") !== false;
|
|
734
|
+
let smsSent = false;
|
|
735
|
+
let whatsappSent = false;
|
|
736
|
+
let smsErrorMessage;
|
|
737
|
+
let whatsappErrorMessage;
|
|
738
|
+
this.logger.debug(`OTP LOGIN SMS send attempt: destination=${user.mobile}, whatsappDestination=${whatsappDestination}`);
|
|
739
|
+
try {
|
|
740
|
+
const smsService = this.smsFactory.getSmsService();
|
|
741
|
+
await smsService.sendSMSUsingTemplate(user.mobile, "otp-on-login", templateParams, false);
|
|
742
|
+
smsSent = true;
|
|
743
|
+
}
|
|
744
|
+
catch (smsError) {
|
|
745
|
+
smsErrorMessage = smsError?.message;
|
|
746
|
+
this.logger.warn(`OTP LOGIN SMS failed: destination=${user.mobile}, message=${smsErrorMessage}`);
|
|
747
|
+
}
|
|
748
|
+
if (whatsappIndependentEnabled) {
|
|
749
|
+
if (!whatsappDestination) {
|
|
750
|
+
whatsappErrorMessage = "Normalized WhatsApp destination is empty";
|
|
751
|
+
this.logger.error(`OTP LOGIN WhatsApp skipped: destination=${user.mobile}, message=${whatsappErrorMessage}`);
|
|
752
|
+
}
|
|
753
|
+
else {
|
|
754
|
+
this.logger.debug(`OTP LOGIN WhatsApp send attempt: destination=${user.mobile}, whatsappDestination=${whatsappDestination}, templateId=${whatsappTemplateId}`);
|
|
755
|
+
try {
|
|
756
|
+
await this.sendOtpToWhatsappProvider(whatsappDestination, String(whatsappTemplateId), String(gupshupTemplateAppName), String(templateParams.otp || ""));
|
|
757
|
+
whatsappSent = true;
|
|
758
|
+
this.logger.log(`OTP LOGIN WhatsApp success: destination=${user.mobile}, whatsappDestination=${whatsappDestination}, templateId=${whatsappTemplateId}`);
|
|
759
|
+
}
|
|
760
|
+
catch (waError) {
|
|
761
|
+
whatsappErrorMessage = waError?.message;
|
|
762
|
+
this.logger.error(`OTP LOGIN WhatsApp failed: destination=${user.mobile}, whatsappDestination=${whatsappDestination}, templateId=${whatsappTemplateId}, message=${whatsappErrorMessage}`);
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
if (!smsSent && !whatsappSent) {
|
|
767
|
+
throw new Error(`OTP LOGIN delivery failed on both channels. smsError=${smsErrorMessage || "unknown"}, whatsappError=${whatsappErrorMessage || "disabled/unknown"}`);
|
|
768
|
+
}
|
|
642
769
|
}
|
|
643
770
|
}
|
|
644
771
|
async otpConfirmLogin(confirmSignInDto) {
|
|
@@ -827,11 +954,11 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
|
|
|
827
954
|
return this.dataSource.transaction(async (m) => {
|
|
828
955
|
const user = await this.resolveUserByVerificationToken(confirmForgotPasswordDto.verificationToken);
|
|
829
956
|
if (!user)
|
|
830
|
-
throw new common_1.UnauthorizedException(
|
|
957
|
+
throw new common_1.UnauthorizedException("Invalid verification token");
|
|
831
958
|
if (user.lastLoginProvider !== "local")
|
|
832
959
|
throw new common_1.UnauthorizedException(error_messages_1.ERROR_MESSAGES.INVALID_CREDENTIALS);
|
|
833
960
|
if (!user.active)
|
|
834
|
-
throw new common_1.UnauthorizedException(
|
|
961
|
+
throw new common_1.UnauthorizedException("User is inactive");
|
|
835
962
|
const { affected } = await m
|
|
836
963
|
.createQueryBuilder()
|
|
837
964
|
.update(user_entity_1.User)
|
|
@@ -1264,10 +1391,12 @@ AuthenticationService.SIGNUP_DTO_KEYS = new Set([
|
|
|
1264
1391
|
"mobile",
|
|
1265
1392
|
"roles",
|
|
1266
1393
|
"forcePasswordChange",
|
|
1394
|
+
"isAllowedToGenerateApiKeys",
|
|
1395
|
+
"failedLoginAttempts",
|
|
1267
1396
|
]);
|
|
1268
1397
|
exports.AuthenticationService = AuthenticationService = AuthenticationService_1 = __decorate([
|
|
1269
1398
|
(0, common_1.Injectable)(),
|
|
1270
|
-
__param(
|
|
1399
|
+
__param(14, (0, typeorm_1.InjectDataSource)()),
|
|
1271
1400
|
__metadata("design:paramtypes", [user_service_1.UserService,
|
|
1272
1401
|
user_repository_1.UserRepository,
|
|
1273
1402
|
hashing_service_1.HashingService,
|
|
@@ -1276,6 +1405,7 @@ exports.AuthenticationService = AuthenticationService = AuthenticationService_1
|
|
|
1276
1405
|
axios_1.HttpService,
|
|
1277
1406
|
mail_factory_1.MailFactory,
|
|
1278
1407
|
sms_factory_1.SmsFactory,
|
|
1408
|
+
whatsapp_factory_1.WhatsAppFactory,
|
|
1279
1409
|
event_emitter_1.EventEmitter2,
|
|
1280
1410
|
setting_service_1.SettingService,
|
|
1281
1411
|
role_metadata_service_1.RoleMetadataService,
|