@solidxai/core 0.1.9-beta.1 → 0.1.9-beta.4
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/fixtures/fixtures-setup.command.d.ts +1 -1
- package/dist/commands/fixtures/fixtures-tear-down.command.d.ts +1 -1
- package/dist/commands/info.command.d.ts +3 -3
- package/dist/commands/ingest.command.d.ts +2 -2
- package/dist/commands/mcp.command.d.ts +1 -1
- package/dist/commands/refresh-model.command.d.ts +1 -1
- package/dist/commands/remove-fields.command.d.ts +1 -1
- package/dist/commands/run-tests.command.d.ts +1 -1
- package/dist/commands/seed.command.d.ts +1 -1
- package/dist/commands/test-data.command.d.ts +1 -1
- package/dist/controllers/action-metadata.controller.d.ts +1 -1
- package/dist/controllers/agent-event.controller.d.ts +3 -3
- package/dist/controllers/agent-session.controller.d.ts +3 -3
- package/dist/controllers/ai-interaction.controller.d.ts +1 -1
- package/dist/controllers/dashboard-layout.controller.d.ts +3 -3
- package/dist/controllers/dashboard-question.controller.d.ts +1 -1
- package/dist/controllers/dashboard.controller.d.ts +1 -1
- package/dist/controllers/export-template.controller.d.ts +2 -2
- package/dist/controllers/field-metadata.controller.d.ts +1 -1
- package/dist/controllers/google-authentication.controller.d.ts +1 -1
- package/dist/controllers/import-transaction.controller.d.ts +1 -1
- package/dist/controllers/locale.controller.d.ts +3 -3
- package/dist/controllers/media.controller.d.ts +3 -3
- package/dist/controllers/menu-item-metadata.controller.d.ts +2 -2
- package/dist/controllers/model-metadata.controller.d.ts +1 -1
- package/dist/controllers/mq-message-queue.controller.d.ts +1 -1
- package/dist/controllers/mq-message.controller.d.ts +1 -1
- package/dist/controllers/permission-metadata.controller.d.ts +1 -1
- package/dist/controllers/role-metadata.controller.d.ts +1 -1
- package/dist/controllers/scheduled-job.controller.d.ts +3 -3
- package/dist/controllers/service.controller.d.ts +4 -4
- package/dist/controllers/setting.controller.d.ts +1 -1
- package/dist/controllers/test-queue.controller.d.ts +1 -1
- package/dist/controllers/test.controller.d.ts +2 -2
- package/dist/controllers/user-view-metadata.controller.d.ts +2 -2
- package/dist/controllers/user.controller.d.ts +2 -2
- package/dist/controllers/view-metadata.controller.d.ts +2 -2
- package/dist/decorators/extension-user-creation-provider.decorator.d.ts +3 -0
- package/dist/decorators/extension-user-creation-provider.decorator.d.ts.map +1 -0
- package/dist/decorators/extension-user-creation-provider.decorator.js +7 -0
- package/dist/decorators/extension-user-creation-provider.decorator.js.map +1 -0
- package/dist/decorators/solid-password.decorator.d.ts +1 -1
- package/dist/dtos/create-dashboard-question.dto.d.ts +1 -1
- package/dist/dtos/create-dashboard.dto.d.ts +2 -2
- package/dist/dtos/create-field-metadata.dto.js +1 -2
- package/dist/dtos/create-field-metadata.dto.js.map +1 -1
- package/dist/dtos/create-import-transaction.dto.d.ts +1 -1
- package/dist/dtos/create-menu-item-metadata.dto.d.ts +1 -1
- package/dist/dtos/create-mq-message-queue.dto.d.ts +1 -1
- package/dist/dtos/create-permission-metadata.dto.d.ts +1 -1
- package/dist/dtos/create-role-metadata.dto.d.ts +3 -3
- package/dist/dtos/create-user.dto.d.ts +3 -2
- package/dist/dtos/create-user.dto.d.ts.map +1 -1
- package/dist/dtos/create-user.dto.js +8 -1
- package/dist/dtos/create-user.dto.js.map +1 -1
- package/dist/dtos/create-view-metadata.dto.d.ts +1 -1
- package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts +1 -1
- package/dist/dtos/fetch-roles.dto.d.ts +1 -1
- package/dist/dtos/selection-dynamic-query.dto.d.ts +1 -1
- package/dist/dtos/solid-request-context.dto.d.ts +1 -1
- package/dist/dtos/sort-filter.dto.d.ts +1 -1
- package/dist/dtos/update-dashboard-question.dto.d.ts +1 -1
- package/dist/dtos/update-dashboard.dto.d.ts +2 -2
- package/dist/dtos/update-import-transaction.dto.d.ts +1 -1
- package/dist/dtos/update-menu-item-metadata.dto.d.ts +1 -1
- package/dist/dtos/update-mq-message-queue.dto.d.ts +1 -1
- package/dist/dtos/update-permission-metadata.dto.d.ts +1 -1
- package/dist/dtos/update-role-metadata.dto.d.ts +3 -3
- package/dist/dtos/update-user.dto.d.ts +3 -2
- 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/dtos/update-view-metadata.dto.d.ts +1 -1
- package/dist/entities/action-metadata.entity.d.ts +4 -4
- package/dist/entities/agent-event.entity.d.ts +1 -1
- package/dist/entities/agent-session.entity.d.ts +1 -1
- package/dist/entities/ai-interaction.entity.d.ts +2 -2
- package/dist/entities/chatter-message-details.entity.d.ts +2 -2
- package/dist/entities/chatter-message.entity.d.ts +2 -2
- package/dist/entities/dashboard-layout.entity.d.ts +2 -2
- package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts +2 -2
- package/dist/entities/dashboard-question.entity.d.ts +3 -3
- package/dist/entities/dashboard-variable.entity.d.ts +2 -2
- package/dist/entities/dashboard.entity.d.ts +4 -4
- package/dist/entities/email-template.entity.d.ts +1 -1
- package/dist/entities/export-template.entity.d.ts +2 -2
- package/dist/entities/export-transaction.entity.d.ts +2 -2
- package/dist/entities/field-metadata.entity.d.ts +2 -2
- package/dist/entities/import-transaction-error-log.entity.d.ts +2 -2
- package/dist/entities/import-transaction.entity.d.ts +3 -3
- package/dist/entities/list-of-values.entity.d.ts +2 -2
- package/dist/entities/locale.entity.d.ts +1 -1
- package/dist/entities/media-storage-provider-metadata.entity.d.ts +1 -1
- package/dist/entities/media.entity.d.ts +4 -4
- package/dist/entities/menu-item-metadata.entity.d.ts +4 -4
- package/dist/entities/model-metadata.entity.d.ts +1 -1
- package/dist/entities/model-sequence.entity.d.ts +4 -4
- package/dist/entities/module-metadata.entity.d.ts +1 -1
- package/dist/entities/mq-message-queue.entity.d.ts +2 -2
- package/dist/entities/mq-message.entity.d.ts +2 -2
- package/dist/entities/permission-metadata.entity.d.ts +2 -2
- package/dist/entities/role-metadata.entity.d.ts +4 -4
- package/dist/entities/saved-filters.entity.d.ts +4 -4
- package/dist/entities/scheduled-job.entity.d.ts +1 -1
- package/dist/entities/security-rule.entity.d.ts +3 -3
- package/dist/entities/setting.entity.d.ts +2 -2
- package/dist/entities/sms-template.entity.d.ts +1 -1
- package/dist/entities/user-activity-history.entity.d.ts +2 -2
- package/dist/entities/user-api-key.entity.d.ts +1 -1
- package/dist/entities/user-view-metadata.entity.d.ts +3 -3
- package/dist/entities/user.entity.d.ts +4 -4
- package/dist/entities/view-metadata.entity.d.ts +4 -4
- package/dist/factories/mail.factory.d.ts +3 -3
- package/dist/factories/sms.factory.d.ts +3 -3
- package/dist/factories/whatsapp.factory.d.ts +3 -3
- package/dist/filters/http-exception.filter.d.ts +1 -1
- package/dist/guards/api-key.guard.d.ts +1 -1
- package/dist/helpers/error-mapper.service.d.ts +2 -2
- package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/BooleanFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/ComputedFieldCrudManager.d.ts +2 -2
- package/dist/helpers/field-crud-managers/DateFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/DecimalFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/EmailFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/IntFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/JsonFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/LongTextFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/NoOpsFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/PasswordFieldCrudManager.d.ts +2 -2
- package/dist/helpers/field-crud-managers/RichTextFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.d.ts +2 -2
- package/dist/helpers/field-crud-managers/SelectionStaticFieldCrudManager.d.ts +2 -2
- package/dist/helpers/field-crud-managers/ShortTextFieldCrudManager.d.ts +1 -1
- package/dist/helpers/field-crud-managers/UUIDFieldCrudManager.d.ts +1 -1
- package/dist/helpers/model-metadata-helper.service.d.ts +1 -1
- package/dist/helpers/module-metadata-helper.service.d.ts +1 -1
- package/dist/helpers/solid-core-error-codes-provider.service.d.ts +1 -1
- package/dist/helpers/solid-registry.d.ts +11 -5
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +15 -2
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +11 -3
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/database/api-email-publisher-database.service.d.ts +4 -4
- package/dist/jobs/database/api-email-queue-options-database.d.ts +1 -1
- package/dist/jobs/database/api-email-subscriber-database.service.d.ts +7 -7
- package/dist/jobs/database/chatter-queue-publisher-database.service.d.ts +1 -1
- package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts +4 -4
- package/dist/jobs/database/computed-field-evaluation-publisher-database.service.d.ts +5 -5
- package/dist/jobs/database/computed-field-evaluation-subscriber-database.service.d.ts +8 -8
- package/dist/jobs/database/generate-code-publisher-database.service.d.ts +1 -1
- package/dist/jobs/database/generate-code-subscriber-database.service.d.ts +4 -4
- package/dist/jobs/database/msg91-sms-publisher-database.service.d.ts +4 -4
- package/dist/jobs/database/msg91-sms-queue-database-options.d.ts +1 -1
- package/dist/jobs/database/msg91-sms-subscriber-database.service.d.ts +7 -7
- package/dist/jobs/database/msg91-whatsapp-publisher-database.service.d.ts +4 -4
- package/dist/jobs/database/msg91-whatsapp-queue-options-database.d.ts +1 -1
- package/dist/jobs/database/msg91-whatsapp-subscriber-database.service.d.ts +7 -7
- package/dist/jobs/database/otp-publisher-database.service.d.ts +4 -4
- package/dist/jobs/database/otp-queue-options-database.d.ts +1 -1
- package/dist/jobs/database/otp-subscriber-database.service.d.ts +7 -7
- package/dist/jobs/database/smtp-email-publisher-database.service.d.ts +4 -4
- package/dist/jobs/database/smtp-email-queue-options-database.d.ts +1 -1
- package/dist/jobs/database/smtp-email-subscriber-database.service.d.ts +7 -7
- package/dist/jobs/database/test-queue-publisher-database.service.d.ts +1 -1
- package/dist/jobs/database/test-queue-subscriber-database.service.d.ts +3 -3
- package/dist/jobs/database/three60-whatsapp-publisher-database.service.d.ts +4 -4
- package/dist/jobs/database/three60-whatsapp-queue-options-database.d.ts +1 -1
- package/dist/jobs/database/three60-whatsapp-subscriber-database.service.d.ts +7 -7
- package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts +4 -4
- package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts +1 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +8 -8
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +2 -2
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
- package/dist/jobs/database/twilio-sms-publisher-database.service.d.ts +4 -4
- package/dist/jobs/database/twilio-sms-queue-database-options.d.ts +1 -1
- package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts +7 -7
- package/dist/jobs/rabbitmq/api-email-publisher.service.d.ts +3 -3
- package/dist/jobs/rabbitmq/api-email-subscriber.service.d.ts +4 -4
- package/dist/jobs/rabbitmq/chatter-queue-publisher.service.d.ts +1 -1
- package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.d.ts +3 -3
- package/dist/jobs/rabbitmq/computed-field-evaluation-publisher.service.d.ts +5 -5
- package/dist/jobs/rabbitmq/computed-field-evaluation-subscriber.service.d.ts +8 -8
- package/dist/jobs/rabbitmq/generate-code-publisher.service.d.ts +1 -1
- package/dist/jobs/rabbitmq/generate-code-subscriber.service.d.ts +7 -7
- package/dist/jobs/rabbitmq/msg91-otp-publisher.service.d.ts +3 -3
- package/dist/jobs/rabbitmq/msg91-otp-subscriber.service.d.ts +5 -5
- package/dist/jobs/rabbitmq/msg91-sms-publisher.service.d.ts +3 -3
- package/dist/jobs/rabbitmq/msg91-sms-subscriber.service.d.ts +5 -5
- package/dist/jobs/rabbitmq/msg91-whatsapp-publisher.service.d.ts +3 -3
- package/dist/jobs/rabbitmq/msg91-whatsapp-subscriber.service.d.ts +4 -4
- package/dist/jobs/rabbitmq/smtp-email-publisher.service.d.ts +3 -3
- package/dist/jobs/rabbitmq/smtp-email-subscriber.service.d.ts +4 -4
- package/dist/jobs/rabbitmq/test-queue-publisher.service.d.ts +1 -1
- package/dist/jobs/rabbitmq/test-queue-subscriber.service.d.ts +2 -2
- package/dist/jobs/rabbitmq/three60-whatsapp-publisher.service.d.ts +3 -3
- package/dist/jobs/rabbitmq/three60-whatsapp-subscriber.service.d.ts +5 -5
- package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts +3 -3
- package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts +6 -6
- package/dist/jobs/rabbitmq/twilio-sms-publisher.service.d.ts +3 -3
- package/dist/jobs/rabbitmq/twilio-sms-subscriber.service.d.ts +6 -6
- package/dist/jobs/redis/api-email-publisher-redis.service.d.ts +1 -1
- package/dist/jobs/redis/api-email-subscriber-redis.service.d.ts +2 -2
- package/dist/jobs/redis/chatter-queue-publisher-redis.service.d.ts +1 -1
- package/dist/jobs/redis/chatter-queue-subscriber-redis.service.d.ts +2 -2
- package/dist/jobs/redis/computed-field-evaluation-publisher-redis.service.d.ts +2 -2
- package/dist/jobs/redis/computed-field-evaluation-subscriber-redis.service.d.ts +4 -4
- package/dist/jobs/redis/generate-code-publisher-redis.service.d.ts +1 -1
- package/dist/jobs/redis/generate-code-subscriber-redis.service.d.ts +3 -3
- package/dist/jobs/redis/msg91-otp-publisher-redis.service.d.ts +1 -1
- package/dist/jobs/redis/msg91-otp-subscriber-redis.service.d.ts +3 -3
- package/dist/jobs/redis/msg91-sms-publisher-redis.service.d.ts +1 -1
- package/dist/jobs/redis/msg91-sms-subscriber-redis.service.d.ts +3 -3
- package/dist/jobs/redis/msg91-whatsapp-publisher-redis.service.d.ts +1 -1
- package/dist/jobs/redis/msg91-whatsapp-subscriber-redis.service.d.ts +2 -2
- package/dist/jobs/redis/smtp-email-publisher-redis.service.d.ts +1 -1
- package/dist/jobs/redis/smtp-email-subscriber-redis.service.d.ts +2 -2
- package/dist/jobs/redis/test-queue-publisher-redis.service.d.ts +1 -1
- package/dist/jobs/redis/test-queue-subscriber-redis.service.d.ts +2 -2
- package/dist/jobs/redis/three60-whatsapp-publisher-redis.service.d.ts +1 -1
- package/dist/jobs/redis/three60-whatsapp-subscriber-redis.service.d.ts +2 -2
- package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts +1 -1
- package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts +2 -2
- package/dist/jobs/redis/twilio-sms-publisher-redis.service.d.ts +1 -1
- package/dist/jobs/redis/twilio-sms-subscriber-redis.service.d.ts +3 -3
- package/dist/mappers/dashboard-mapper.d.ts +1 -1
- package/dist/mappers/list-of-values-mapper.d.ts +1 -1
- package/dist/repository/action-metadata.repository.d.ts +2 -2
- package/dist/repository/agent-event.repository.d.ts +2 -2
- package/dist/repository/agent-session.repository.d.ts +2 -2
- package/dist/repository/ai-interaction.repository.d.ts +2 -2
- package/dist/repository/chatter-message-details.repository.d.ts +2 -2
- package/dist/repository/chatter-message.repository.d.ts +2 -2
- package/dist/repository/dashboard-layout.repository.d.ts +2 -2
- package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts +2 -2
- package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts.map +1 -1
- package/dist/repository/dashboard-question-sql-dataset-config.repository.js +2 -2
- package/dist/repository/dashboard-question-sql-dataset-config.repository.js.map +1 -1
- package/dist/repository/dashboard-question.repository.d.ts +2 -2
- package/dist/repository/dashboard-question.repository.d.ts.map +1 -1
- package/dist/repository/dashboard-question.repository.js +2 -2
- package/dist/repository/dashboard-question.repository.js.map +1 -1
- package/dist/repository/dashboard-variable.repository.d.ts +2 -2
- package/dist/repository/dashboard-variable.repository.d.ts.map +1 -1
- package/dist/repository/dashboard-variable.repository.js +2 -2
- package/dist/repository/dashboard-variable.repository.js.map +1 -1
- package/dist/repository/dashboard.repository.d.ts +2 -2
- package/dist/repository/email-template.repository.d.ts +2 -2
- package/dist/repository/email-template.repository.d.ts.map +1 -1
- package/dist/repository/email-template.repository.js +2 -2
- package/dist/repository/email-template.repository.js.map +1 -1
- package/dist/repository/export-template.repository.d.ts +2 -2
- package/dist/repository/export-template.repository.d.ts.map +1 -1
- package/dist/repository/export-template.repository.js +2 -2
- package/dist/repository/export-template.repository.js.map +1 -1
- package/dist/repository/export-transaction.repository.d.ts +2 -2
- package/dist/repository/export-transaction.repository.d.ts.map +1 -1
- package/dist/repository/export-transaction.repository.js +2 -2
- package/dist/repository/export-transaction.repository.js.map +1 -1
- package/dist/repository/field-metadata.repository.d.ts +1 -1
- package/dist/repository/import-transaction-error-log.repository.d.ts +2 -2
- package/dist/repository/import-transaction-error-log.repository.d.ts.map +1 -1
- package/dist/repository/import-transaction-error-log.repository.js +2 -2
- package/dist/repository/import-transaction-error-log.repository.js.map +1 -1
- package/dist/repository/import-transaction.repository.d.ts +2 -2
- package/dist/repository/import-transaction.repository.d.ts.map +1 -1
- package/dist/repository/import-transaction.repository.js +2 -2
- package/dist/repository/import-transaction.repository.js.map +1 -1
- package/dist/repository/list-of-values.repository.d.ts +2 -2
- package/dist/repository/list-of-values.repository.d.ts.map +1 -1
- package/dist/repository/list-of-values.repository.js +2 -2
- package/dist/repository/list-of-values.repository.js.map +1 -1
- package/dist/repository/locale.repository.d.ts +2 -2
- package/dist/repository/locale.repository.d.ts.map +1 -1
- package/dist/repository/locale.repository.js +2 -2
- package/dist/repository/locale.repository.js.map +1 -1
- package/dist/repository/media-storage-provider-metadata.repository.d.ts +1 -1
- package/dist/repository/media.repository.d.ts +2 -2
- package/dist/repository/menu-item-metadata.repository.d.ts +2 -2
- package/dist/repository/menu-item-metadata.repository.d.ts.map +1 -1
- package/dist/repository/menu-item-metadata.repository.js +2 -2
- package/dist/repository/menu-item-metadata.repository.js.map +1 -1
- package/dist/repository/model-metadata.repository.d.ts +1 -1
- package/dist/repository/model-metadata.repository.d.ts.map +1 -1
- package/dist/repository/model-metadata.repository.js +2 -2
- package/dist/repository/model-metadata.repository.js.map +1 -1
- package/dist/repository/model-sequence.repository.d.ts +3 -3
- package/dist/repository/module-metadata.repository.d.ts +1 -1
- package/dist/repository/module-metadata.repository.d.ts.map +1 -1
- package/dist/repository/module-metadata.repository.js +2 -2
- package/dist/repository/module-metadata.repository.js.map +1 -1
- package/dist/repository/mq-message-queue.repository.d.ts +2 -2
- package/dist/repository/mq-message-queue.repository.d.ts.map +1 -1
- package/dist/repository/mq-message-queue.repository.js +2 -2
- package/dist/repository/mq-message-queue.repository.js.map +1 -1
- package/dist/repository/mq-message.repository.d.ts +2 -2
- package/dist/repository/mq-message.repository.d.ts.map +1 -1
- package/dist/repository/mq-message.repository.js +2 -2
- package/dist/repository/mq-message.repository.js.map +1 -1
- package/dist/repository/permission-metadata.repository.d.ts +2 -2
- package/dist/repository/permission-metadata.repository.d.ts.map +1 -1
- package/dist/repository/permission-metadata.repository.js +2 -2
- package/dist/repository/permission-metadata.repository.js.map +1 -1
- package/dist/repository/role-metadata.repository.d.ts +2 -2
- package/dist/repository/role-metadata.repository.d.ts.map +1 -1
- package/dist/repository/role-metadata.repository.js +2 -2
- package/dist/repository/role-metadata.repository.js.map +1 -1
- package/dist/repository/saved-filters.repository.d.ts +2 -2
- package/dist/repository/scheduled-job.repository.d.ts +3 -3
- package/dist/repository/security-rule.repository.d.ts +7 -7
- package/dist/repository/setting.repository.d.ts +2 -2
- package/dist/repository/setting.repository.d.ts.map +1 -1
- package/dist/repository/setting.repository.js +2 -2
- package/dist/repository/setting.repository.js.map +1 -1
- package/dist/repository/sms-template.repository.d.ts +2 -2
- package/dist/repository/sms-template.repository.d.ts.map +1 -1
- package/dist/repository/sms-template.repository.js +2 -2
- package/dist/repository/sms-template.repository.js.map +1 -1
- package/dist/repository/solid-base.repository.d.ts +2 -2
- package/dist/repository/user-activity-history.repository.d.ts +2 -2
- package/dist/repository/user-activity-history.repository.d.ts.map +1 -1
- package/dist/repository/user-activity-history.repository.js +2 -2
- package/dist/repository/user-activity-history.repository.js.map +1 -1
- package/dist/repository/user-api-key.repository.d.ts +2 -2
- package/dist/repository/user-view-metadata.repository.d.ts +2 -2
- package/dist/repository/user-view-metadata.repository.d.ts.map +1 -1
- package/dist/repository/user-view-metadata.repository.js +2 -2
- package/dist/repository/user-view-metadata.repository.js.map +1 -1
- package/dist/repository/user.repository.d.ts +2 -2
- package/dist/repository/view-metadata.repository.d.ts +2 -2
- package/dist/seeders/module-metadata-seeder.service.d.ts +17 -14
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +65 -38
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/module-test-data.service.d.ts +1 -1
- package/dist/seeders/module-test-data.service.d.ts.map +1 -1
- package/dist/seeders/module-test-data.service.js +1 -8
- package/dist/seeders/module-test-data.service.js.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.d.ts +2 -2
- package/dist/seeders/seed-data/solid-core-metadata.json +7 -1
- package/dist/seeders/system-fields-seeder.service.d.ts +3 -3
- package/dist/services/action-metadata.service.d.ts +2 -2
- package/dist/services/agent-event.service.d.ts +2 -2
- package/dist/services/agent-session.service.d.ts +2 -2
- package/dist/services/ai-interaction.service.d.ts +4 -4
- package/dist/services/api-key.service.d.ts +6 -6
- package/dist/services/authentication.service.d.ts +10 -6
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +25 -21
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message-details.service.d.ts +2 -2
- package/dist/services/chatter-message.service.d.ts +7 -7
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.d.ts +3 -3
- package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.d.ts +3 -3
- package/dist/services/computed-fields/entity/noops-entity-computed-field-provider.service.d.ts +2 -2
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts +3 -3
- package/dist/services/computed-fields/entity/uuid-externalid-entity-computed-field-provider.service.d.ts +2 -2
- package/dist/services/crud-helper.service.d.ts +1 -1
- package/dist/services/crud.service.d.ts +4 -1
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +52 -3
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/dashboard-layout.service.d.ts +4 -4
- package/dist/services/dashboard-question-sql-dataset-config.service.d.ts +2 -2
- package/dist/services/dashboard-question.service.d.ts +3 -3
- package/dist/services/dashboard-question.service.js.map +1 -1
- package/dist/services/dashboard-variable.service.d.ts +2 -2
- package/dist/services/dashboard.service.d.ts +7 -7
- package/dist/services/email-template.service.d.ts +1 -1
- package/dist/services/export-template.service.d.ts +5 -5
- package/dist/services/export-transaction.service.d.ts +7 -7
- package/dist/services/field-metadata.service.d.ts +5 -5
- package/dist/services/fixtures.service.d.ts +1 -1
- package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts +1 -1
- package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts +1 -1
- package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts +2 -2
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts +1 -1
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts +1 -1
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts +1 -1
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts +1 -1
- package/dist/services/import-transaction-error-log.service.d.ts +2 -2
- package/dist/services/import-transaction.service.d.ts +6 -6
- package/dist/services/list-of-values.service.d.ts +4 -4
- package/dist/services/locale.service.d.ts +4 -4
- package/dist/services/mail/elastic-email.service.d.ts +1 -1
- package/dist/services/mail/smtp-email.service.d.ts +1 -1
- package/dist/services/media-storage-provider-metadata.service.d.ts +1 -1
- package/dist/services/media.service.d.ts +8 -8
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts +5 -5
- package/dist/services/mediaStorageProviders/file-storage-provider.d.ts +5 -5
- package/dist/services/menu-item-metadata.service.d.ts +4 -4
- package/dist/services/model-metadata.service.d.ts +4 -4
- package/dist/services/model-sequence.service.d.ts +1 -1
- package/dist/services/module-metadata.service.d.ts +4 -4
- package/dist/services/mq-message-queue.service.d.ts +2 -2
- package/dist/services/mq-message.service.d.ts +2 -2
- package/dist/services/permission-metadata.service.d.ts +2 -2
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +2 -2
- package/dist/services/question-data-providers/helpers.d.ts +1 -1
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +2 -2
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +2 -2
- package/dist/services/queues/publisher-factory.service.d.ts +1 -1
- package/dist/services/request-context.service.d.ts +2 -2
- package/dist/services/role-metadata.service.d.ts +3 -3
- package/dist/services/saved-filters.service.d.ts +2 -2
- package/dist/services/scheduled-job.service.d.ts +3 -3
- package/dist/services/scheduled-jobs/scheduled-job.interface.d.ts +1 -1
- package/dist/services/scheduled-jobs/scheduler.interface.d.ts +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.d.ts +3 -3
- package/dist/services/security-rule.service.d.ts +3 -3
- package/dist/services/security-rule.service.d.ts.map +1 -1
- package/dist/services/security-rule.service.js +3 -3
- package/dist/services/security-rule.service.js.map +1 -1
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts +1 -1
- package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts +1 -1
- package/dist/services/selection-providers/list-of-models-selection-provider.service.d.ts +1 -1
- package/dist/services/selection-providers/list-of-scheduled-jobs-selection-provider.service.d.ts +1 -1
- package/dist/services/setting.service.d.ts +5 -5
- package/dist/services/settings/default-settings-provider.service.d.ts +1 -1
- package/dist/services/short-url/tiny-url.service.d.ts +1 -1
- package/dist/services/sms/Msg91BaseSMSService.d.ts +1 -1
- package/dist/services/sms/Msg91OTPService.d.ts +1 -1
- package/dist/services/sms/Msg91SMSService.d.ts +1 -1
- package/dist/services/sms/TwilioSMSService.d.ts +1 -1
- package/dist/services/sms-template.service.d.ts +1 -1
- package/dist/services/solid-introspect.service.d.ts +9 -8
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +11 -0
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/services/user-activity-history.service.d.ts +3 -3
- package/dist/services/user-view-metadata.service.d.ts +4 -4
- package/dist/services/user.service.d.ts +3 -3
- package/dist/services/view-metadata.service.d.ts +4 -4
- package/dist/services/whatsapp/Msg91WhatsappService.d.ts +1 -1
- package/dist/services/whatsapp/Three60WhatsappService.d.ts +1 -1
- package/dist/subscribers/audit.subscriber.d.ts +4 -4
- package/dist/subscribers/computed-entity-field.subscriber.d.ts +2 -2
- package/dist/subscribers/created-by-updated-by.subscriber.d.ts +1 -1
- package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts +3 -3
- package/dist/subscribers/dashboard-question.subscriber.d.ts +3 -3
- package/dist/subscribers/dashboard-variable.subscriber.d.ts +3 -3
- package/dist/subscribers/dashboard.subscriber.d.ts +3 -3
- package/dist/subscribers/list-of-values.subscriber.d.ts +3 -3
- package/dist/subscribers/model-metadata.subscriber.d.ts +1 -1
- package/dist/subscribers/scheduled-job.subscriber.d.ts +3 -3
- package/dist/subscribers/security-rule.subscriber.d.ts +3 -3
- package/dist/subscribers/view-metadata.subscriber.d.ts +2 -2
- package/dist/testing/contracts/testing-metadata.types.d.ts +1 -0
- package/dist/testing/contracts/testing-metadata.types.d.ts.map +1 -1
- package/dist/testing/contracts/testing-metadata.types.js.map +1 -1
- package/dist/testing/steps/ui/assertions.step.d.ts.map +1 -1
- package/dist/testing/steps/ui/assertions.step.js +8 -0
- package/dist/testing/steps/ui/assertions.step.js.map +1 -1
- package/dist/testing/steps/ui/form.step.d.ts.map +1 -1
- package/dist/testing/steps/ui/form.step.js +49 -0
- package/dist/testing/steps/ui/form.step.js.map +1 -1
- package/dist-tests/api/authenticate.spec.js +119 -0
- package/dist-tests/api/authenticate.spec.js.map +1 -0
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +97 -0
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +1 -0
- package/dist-tests/api/ping.spec.js +21 -0
- package/dist-tests/api/ping.spec.js.map +1 -0
- package/dist-tests/helpers/auth.js +41 -0
- package/dist-tests/helpers/auth.js.map +1 -0
- package/dist-tests/helpers/env.js +11 -0
- package/dist-tests/helpers/env.js.map +1 -0
- package/package.json +7 -6
- package/src/decorators/extension-user-creation-provider.decorator.ts +5 -0
- package/src/dtos/create-field-metadata.dto.ts +1 -1
- package/src/dtos/create-user.dto.ts +4 -0
- package/src/dtos/update-user.dto.ts +4 -0
- package/src/helpers/solid-registry.ts +19 -1
- package/src/index.ts +1 -0
- package/src/interfaces.ts +9 -0
- package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +1 -1
- package/src/repository/dashboard-question-sql-dataset-config.repository.ts +1 -1
- package/src/repository/dashboard-question.repository.ts +1 -1
- package/src/repository/dashboard-variable.repository.ts +1 -1
- package/src/repository/email-template.repository.ts +1 -1
- package/src/repository/export-template.repository.ts +2 -1
- package/src/repository/export-transaction.repository.ts +1 -1
- package/src/repository/import-transaction-error-log.repository.ts +1 -1
- package/src/repository/import-transaction.repository.ts +1 -1
- package/src/repository/list-of-values.repository.ts +1 -1
- package/src/repository/locale.repository.ts +1 -1
- package/src/repository/menu-item-metadata.repository.ts +1 -1
- package/src/repository/model-metadata.repository.ts +1 -1
- package/src/repository/module-metadata.repository.ts +1 -1
- package/src/repository/mq-message-queue.repository.ts +2 -1
- package/src/repository/mq-message.repository.ts +1 -1
- package/src/repository/permission-metadata.repository.ts +1 -1
- package/src/repository/role-metadata.repository.ts +1 -1
- package/src/repository/setting.repository.ts +1 -1
- package/src/repository/sms-template.repository.ts +1 -1
- package/src/repository/user-activity-history.repository.ts +1 -1
- package/src/repository/user-view-metadata.repository.ts +1 -1
- package/src/seeders/module-metadata-seeder.service.ts +50 -25
- package/src/seeders/module-test-data.service.ts +1 -8
- package/src/seeders/seed-data/solid-core-metadata.json +7 -1
- package/src/services/authentication.service.ts +28 -31
- package/src/services/crud.service.ts +22 -2
- package/src/services/dashboard-question.service.ts +1 -1
- package/src/services/security-rule.service.ts +1 -1
- package/src/services/solid-introspect.service.ts +13 -0
- package/src/testing/contracts/testing-metadata.types.ts +1 -0
- package/src/testing/steps/ui/assertions.step.ts +9 -0
- package/src/testing/steps/ui/form.step.ts +19 -0
- package/tsconfig.json +3 -0
- package/.claude/settings.local.json +0 -15
- package/src/services/1.js +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-test-data.service.d.ts","sourceRoot":"","sources":["../../src/seeders/module-test-data.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAY3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAU3D,qBACa,qBAAqB;IAI9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;IALhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;gBAG9C,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa;IAGzC,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBtD,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqEtC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoD5C,OAAO,KAAK,aAAa,GAexB;YAEa,YAAY;YA4HZ,aAAa;YAoCb,qBAAqB;YA6BrB,aAAa;
|
|
1
|
+
{"version":3,"file":"module-test-data.service.d.ts","sourceRoot":"","sources":["../../src/seeders/module-test-data.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAY3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAU3D,qBACa,qBAAqB;IAI9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;IALhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;gBAG9C,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa;IAGzC,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBtD,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqEtC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoD5C,OAAO,KAAK,aAAa,GAexB;YAEa,YAAY;YA4HZ,aAAa;YAoCb,qBAAqB;YA6BrB,aAAa;YAmBb,kBAAkB;YAsDlB,eAAe;IAsD7B,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAED,OAAO,KAAK,eAAe,GAE1B;IAED,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,oBAAoB;YA4Bd,yBAAyB;IA6BvC,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,kBAAkB;YAmCZ,uBAAuB;YA4BvB,eAAe;CA4B9B"}
|
|
@@ -371,14 +371,7 @@ let ModuleTestDataService = ModuleTestDataService_1 = class ModuleTestDataServic
|
|
|
371
371
|
this.logger.debug(`Test user "${user.username}" already exists — skipping signUp.`);
|
|
372
372
|
continue;
|
|
373
373
|
}
|
|
374
|
-
await authService.signUp({
|
|
375
|
-
username: user.username,
|
|
376
|
-
email: user.email,
|
|
377
|
-
password: user.password,
|
|
378
|
-
fullName: user.fullName,
|
|
379
|
-
mobile: user.mobile,
|
|
380
|
-
roles: user.roles,
|
|
381
|
-
});
|
|
374
|
+
await authService.signUp({ ...user });
|
|
382
375
|
this.logger.log(`Created test user "${user.username}"${user.roles?.length ? ` with roles [${user.roles.join(', ')}]` : ''}`);
|
|
383
376
|
}
|
|
384
377
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-test-data.service.js","sourceRoot":"","sources":["../../src/seeders/module-test-data.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport { DiscoveryService, ModuleRef } from '@nestjs/core';\nimport { getDataSourceToken } from '@nestjs/typeorm';\nimport { classify } from '@angular-devkit/core/src/utils/strings';\nimport { DataSource, EntityManager } from 'typeorm';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nimport solidCoreMetadata from './seed-data/solid-core-metadata.json';\nimport { CreateModuleMetadataDto } from 'src/dtos/create-module-metadata.dto';\nimport { CreateModelMetadataDto } from 'src/dtos/create-model-metadata.dto';\nimport { MediaStorageProviderType } from 'src/dtos/create-media-storage-provider-metadata.dto';\nimport { getDynamicModuleNamesBasedOnMetadata } from 'src/helpers/module.helper';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { MediaRepository } from 'src/repository/media.repository';\nimport { PermissionMetadataRepository } from 'src/repository/permission-metadata.repository';\nimport { AuthenticationService } from 'src/services/authentication.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { RoleMetadataService } from 'src/services/role-metadata.service';\nimport { UserService } from 'src/services/user.service';\nimport { getMediaStorageProvider } from 'src/services/mediaStorageProviders';\nimport { TestingRoleSpec, TestingUserSpec } from 'src/testing/contracts/testing-metadata.types';\n\n@Injectable()\nexport class ModuleTestDataService {\n private readonly logger = new Logger(ModuleTestDataService.name);\n\n constructor(\n private readonly moduleRef: ModuleRef,\n private readonly discoveryService: DiscoveryService,\n private readonly solidRegistry: SolidRegistry,\n ) {}\n\n async setupTestData(modulesToTest?: string[]): Promise<void> {\n const testDataFiles = this.testDataFiles;\n const filteredFiles = modulesToTest?.length ? testDataFiles.filter((file) => modulesToTest.includes(file.moduleMetadata?.name)) : testDataFiles;\n\n if (filteredFiles.length === 0) {\n this.logger.warn('No modules matched the provided modulesToTest list.');\n console.log('No modules matched the provided modulesToTest list.');\n return;\n }\n\n for (const overallMetadata of filteredFiles) {\n const moduleName = overallMetadata?.moduleMetadata?.name ?? 'unknown';\n this.logger.log(`Processing test data for module: ${moduleName}`);\n console.log(`Processing test data for module: ${moduleName}`);\n await this.seedTestData(overallMetadata);\n console.log(`✔ Test data setup complete for module: ${moduleName}`);\n }\n }\n\n async createTestDatasources(): Promise<void> {\n const manifestPath = path.join(process.cwd(), '.solidx-test-manifest');\n if (fs.existsSync(manifestPath)) {\n console.log('Existing .solidx-test-manifest found; skipping test datasource creation.');\n return;\n }\n\n const dbRunName = this.generateDbRunName();\n const timestamp = this.getTimestamp();\n const envPath = path.join(process.cwd(), '.env');\n if (!fs.existsSync(envPath)) {\n throw new Error(`Base .env file not found at ${envPath}`);\n }\n\n const datasourceNames = this.solidRegistry\n .getSolidDatabaseModules()\n .map((wrapper) => wrapper.instance?.name?.())\n .filter(Boolean)\n .map((name) => name.toLowerCase()) as string[];\n\n if (datasourceNames.length === 0) {\n throw new Error('No solid database modules registered; cannot create test datasources.');\n }\n\n const dbNameByDatasource = new Map<string, string>();\n for (const dsName of datasourceNames) {\n dbNameByDatasource.set(dsName, `${dsName}_${timestamp}_${dbRunName}`);\n }\n\n const newEnvContents = this.buildTestEnvContents(\n fs.readFileSync(envPath, 'utf-8'),\n dbNameByDatasource,\n );\n\n const backupEnvPath = path.join(process.cwd(), `.env.backup.${dbRunName}`);\n fs.copyFileSync(envPath, backupEnvPath);\n fs.writeFileSync(envPath, newEnvContents);\n console.log(`Backed up .env to ${path.basename(backupEnvPath)} and applied new test datasource names to .env.`);\n\n this.updateTestManifest(dbRunName, timestamp, dbNameByDatasource);\n\n await this.createTestDatabaseObjects(dbNameByDatasource);\n\n const dbList = Array.from(dbNameByDatasource.entries())\n .map(([dsName, dbName]) => `- ${dsName}: ${dbName}`)\n .join('\\n');\n\n const instructions = [\n '',\n '============================================================',\n ' TEST DATASOURCE ENVIRONMENT CREATED',\n '------------------------------------------------------------',\n ` Run name : ${dbRunName}`,\n ` Env backup : ${path.basename(backupEnvPath)}`,\n '',\n ' Test databases/schemas created:',\n dbList || ' (none)',\n '',\n ' Next steps:',\n ' 1) Using updated .env with test datasource names',\n ' 2) Run solid seed as usual',\n ' 3) Proceed with the next steps in the workflow',\n '============================================================',\n '',\n ].join('\\n');\n\n console.log(instructions);\n }\n\n async deleteTestDatasources(): Promise<void> {\n const manifestPath = path.join(process.cwd(), '.solidx-test-manifest');\n if (!fs.existsSync(manifestPath)) {\n this.logger.log('No .solidx-test-manifest found; nothing to delete.');\n console.log('No .solidx-test-manifest found; nothing to delete.');\n return;\n }\n\n const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8')) as {\n runs?: Record<string, { databases?: Record<string, string>; createdAt?: string }>;\n };\n const runs = manifest?.runs ?? {};\n const runNames = Object.keys(runs);\n if (runNames.length === 0) {\n fs.unlinkSync(manifestPath);\n return;\n }\n\n const latestRunName = runNames\n .slice()\n .sort((a, b) => {\n const aCreated = runs[a]?.createdAt ?? '';\n const bCreated = runs[b]?.createdAt ?? '';\n return aCreated.localeCompare(bCreated);\n })\n .pop();\n if (latestRunName) {\n const backupEnvPath = path.join(process.cwd(), `.env.backup.${latestRunName}`);\n if (fs.existsSync(backupEnvPath)) {\n fs.copyFileSync(backupEnvPath, path.join(process.cwd(), '.env'));\n console.log(`Restored .env from ${path.basename(backupEnvPath)}.`);\n fs.unlinkSync(backupEnvPath);\n }\n }\n\n for (const runName of runNames) {\n const envFileName = `.env.${runName}`;\n const envPath = path.join(process.cwd(), envFileName);\n if (fs.existsSync(envPath)) {\n fs.unlinkSync(envPath);\n }\n }\n\n for (const runName of runNames) {\n const databases = runs[runName]?.databases ?? {};\n await this.dropTestDatabaseObjects(databases);\n }\n\n fs.unlinkSync(manifestPath);\n console.log('✔ Test datasource env files and manifest deleted; test databases dropped.');\n }\n\n private get testDataFiles(): any[] {\n const typedSolidCoreMetadata = structuredClone(solidCoreMetadata);\n const testDataFiles = [typedSolidCoreMetadata];\n const enabledModules = getDynamicModuleNamesBasedOnMetadata();\n for (const enabledModule of enabledModules) {\n const enabledModuleSeedFile = `module-metadata/${enabledModule}/${enabledModule}-metadata.json`;\n const fullPath = path.join(process.cwd(), enabledModuleSeedFile);\n\n if (fs.existsSync(fullPath)) {\n const overallMetadata = JSON.parse(fs.readFileSync(fullPath, 'utf-8'));\n testDataFiles.push(overallMetadata);\n }\n }\n\n return testDataFiles;\n }\n\n private async seedTestData(overallMetadata: any): Promise<void> {\n const moduleMetadata: CreateModuleMetadataDto = overallMetadata.moduleMetadata;\n if (!moduleMetadata) {\n throw new Error('Module metadata missing from test data payload.');\n }\n\n // console.log(JSON.stringify(moduleMetadata, null, 2));\n\n const testingRoles: TestingRoleSpec[] = overallMetadata?.testing?.roles ?? [];\n const testingUsers: TestingUserSpec[] = overallMetadata?.testing?.users ?? [];\n const testingData: Array<{ modelUserKey: string; data: Record<string, any> }> = overallMetadata?.testing?.data ?? [];\n\n if (testingRoles.length > 0) {\n await this.seedTestRoles(testingRoles);\n }\n if (testingUsers.length > 0) {\n await this.seedTestUsers(testingUsers);\n }\n\n if (testingData.length === 0) {\n this.logger.debug(`No test data found for ${moduleMetadata.name}`);\n return;\n }\n\n const modelsByName = new Map<string, CreateModelMetadataDto>(\n (moduleMetadata.models ?? []).map((m) => [m.singularName, m]),\n );\n\n for (const entry of testingData) {\n const modelUserKey = entry.modelUserKey;\n const modelDef = modelsByName.get(modelUserKey);\n if (!modelDef) {\n throw new Error(`Test data modelUserKey not found in metadata: ${modelUserKey}`);\n }\n\n const entityRepo = this.resolveRepository(modelUserKey);\n const payload: Record<string, any> = { ...(entry.data ?? {}) };\n\n for (const field of modelDef.fields ?? []) {\n if (field.type === 'relation' && field.relationType === 'many-to-one') {\n const userKeyProp = `${field.name}UserKey`;\n if (!(userKeyProp in payload)) {\n continue;\n }\n\n const userKeyValue = payload[userKeyProp];\n if (userKeyValue === null || userKeyValue === undefined || userKeyValue === '') {\n delete payload[userKeyProp];\n continue;\n }\n\n const coModelName = field.relationCoModelSingularName;\n const coModelDef = coModelName ? modelsByName.get(coModelName) : null;\n if (!coModelDef) {\n throw new Error(`Test data relation model ${coModelName} not found in metadata, when attempting to resolve field ${modelDef.singularName}.${field.name}`);\n }\n const coUserKeyField = coModelDef.userKeyFieldUserKey;\n if (!coUserKeyField) {\n throw new Error(`Test data relation model ${coModelName} is missing userKeyFieldUserKey, when attempting to resolve field ${modelDef.singularName}.${field.name}`);\n }\n\n const coRepo = this.resolveRepository(coModelName);\n const related = typeof coRepo.findOneByUserKey === 'function'\n ? await coRepo.findOneByUserKey(userKeyValue)\n : await coRepo.findOne({ where: { [coUserKeyField]: userKeyValue } });\n if (!related) {\n throw new Error(`Test data relation not found: ${coModelName}.${coUserKeyField}=${userKeyValue}`);\n }\n\n payload[field.name] = related;\n delete payload[userKeyProp];\n }\n }\n\n // Strip media fields from entity payload — file paths cannot be saved as columns\n const mediaPayload: Record<string, string> = {};\n for (const field of modelDef.fields ?? []) {\n if ((field.type === 'mediaSingle' || field.type === 'mediaMultiple') && payload[field.name] !== undefined) {\n mediaPayload[field.name] = payload[field.name] as string;\n delete payload[field.name];\n }\n }\n\n // Strip many-to-many and one-to-many fields — these are resolved post-save via the relation builder\n const multiRelationPayload: Array<{ field: any; userKeys: string[] }> = [];\n for (const field of modelDef.fields ?? []) {\n if (field.type !== 'relation') continue;\n if (field.relationType !== 'many-to-many' && field.relationType !== 'one-to-many') continue;\n\n const userKeysProp = `${field.name}UserKeys`;\n if (userKeysProp in payload && Array.isArray(payload[userKeysProp])) {\n multiRelationPayload.push({ field, userKeys: payload[userKeysProp] });\n delete payload[userKeysProp];\n }\n // Remove raw field value if accidentally present\n delete payload[field.name];\n }\n\n // Upsert entity, capturing the saved result for post-save steps\n let savedEntity: any;\n const userKeyField = modelDef.userKeyFieldUserKey;\n if (userKeyField && payload[userKeyField] !== undefined) {\n const existing = await entityRepo.findOne({\n where: { [userKeyField]: payload[userKeyField] },\n });\n if (existing) {\n savedEntity = await entityRepo.save(entityRepo.merge(existing, payload));\n } else {\n savedEntity = await entityRepo.save(entityRepo.create(payload));\n }\n } else {\n savedEntity = await entityRepo.save(entityRepo.create(payload));\n }\n\n if (multiRelationPayload.length > 0) {\n await this.seedMultiRelations(savedEntity.id, modelUserKey, multiRelationPayload, modelsByName);\n }\n\n if (Object.keys(mediaPayload).length > 0) {\n await this.seedEntityMedia(savedEntity.id, modelUserKey, mediaPayload);\n }\n }\n }\n\n private async seedTestRoles(roles: TestingRoleSpec[]): Promise<void> {\n const roleService = this.moduleRef.get(RoleMetadataService, { strict: false });\n if (!roleService) {\n throw new Error('RoleMetadataService not available — cannot seed test roles.');\n }\n\n await roleService.createRolesIfNotExists(roles.map((r) => ({ name: r.name } as any)));\n\n for (const role of roles) {\n const perms = role.permissions ?? [];\n if (perms.length === 0) continue;\n\n if (perms.some((p) => p === '*')) {\n await roleService.addAllPermissionsToRole(role.name);\n this.logger.log(`Bound all permissions to test role \"${role.name}\"`);\n continue;\n }\n\n const expanded = await this.expandPermissionNames(perms);\n if (expanded.length === 0) {\n this.logger.warn(`Test role \"${role.name}\" has permissions declared but none resolved — skipping binding.`);\n continue;\n }\n\n try {\n await roleService.addPermissionsToRole(role.name, expanded);\n } catch (err: any) {\n throw new Error(\n `Failed to bind permissions to test role \"${role.name}\": ${err?.message ?? err}. ` +\n `Did you run \"solid seed\" first so controller permissions are registered?`,\n );\n }\n this.logger.log(`Bound ${expanded.length} permissions to test role \"${role.name}\"`);\n }\n }\n\n private async expandPermissionNames(permissions: string[]): Promise<string[]> {\n const permissionRepo = this.moduleRef.get(PermissionMetadataRepository, { strict: false });\n if (!permissionRepo) {\n throw new Error('PermissionMetadataRepository not available — cannot resolve test role permissions.');\n }\n\n const exact = new Set<string>();\n const prefixes: string[] = [];\n for (const entry of permissions) {\n if (!entry) continue;\n if (entry.endsWith('.*')) {\n prefixes.push(entry.slice(0, -1));\n } else {\n exact.add(entry);\n }\n }\n\n if (prefixes.length > 0) {\n const allPermissions = await permissionRepo.find();\n for (const p of allPermissions) {\n if (prefixes.some((prefix) => p.name.startsWith(prefix))) {\n exact.add(p.name);\n }\n }\n }\n\n return Array.from(exact);\n }\n\n private async seedTestUsers(users: TestingUserSpec[]): Promise<void> {\n const userService = this.moduleRef.get(UserService, { strict: false });\n const authService = this.moduleRef.get(AuthenticationService, { strict: false });\n if (!userService || !authService) {\n throw new Error('UserService / AuthenticationService not available — cannot seed test users.');\n }\n\n for (const user of users) {\n const existing = await userService.findOneByUsername(user.username);\n if (existing) {\n this.logger.debug(`Test user \"${user.username}\" already exists — skipping signUp.`);\n continue;\n }\n\n await authService.signUp({\n username: user.username,\n email: user.email,\n password: user.password,\n fullName: user.fullName,\n mobile: user.mobile,\n roles: user.roles,\n });\n this.logger.log(`Created test user \"${user.username}\"${user.roles?.length ? ` with roles [${user.roles.join(', ')}]` : ''}`);\n }\n }\n\n private async seedMultiRelations(\n entityId: number,\n modelUserKey: string,\n relations: Array<{ field: any; userKeys: string[] }>,\n modelsByName: Map<string, CreateModelMetadataDto>,\n ): Promise<void> {\n for (const { field, userKeys } of relations) {\n if (!userKeys.length) continue;\n\n const coModelName = field.relationCoModelSingularName;\n const coModelDef = modelsByName.get(coModelName);\n if (!coModelDef) {\n throw new Error(`Relation model \"${coModelName}\" not found in metadata for field ${modelUserKey}.${field.name}`);\n }\n const coUserKeyField = coModelDef.userKeyFieldUserKey;\n if (!coUserKeyField) {\n throw new Error(`Relation model \"${coModelName}\" is missing userKeyFieldUserKey, needed to resolve ${modelUserKey}.${field.name}`);\n }\n\n const coRepo = this.resolveRepository(coModelName);\n const resolvedIds: number[] = [];\n for (const uk of userKeys) {\n const related = typeof coRepo.findOneByUserKey === 'function'\n ? await coRepo.findOneByUserKey(uk)\n : await coRepo.findOne({ where: { [coUserKeyField]: uk } });\n if (!related) {\n throw new Error(`Related entity not found: ${coModelName}.${coUserKeyField}=${uk}`);\n }\n resolvedIds.push(related.id);\n }\n\n // Load currently associated entities to diff (set semantics — idempotent)\n const existingRelated: any[] = await this.entityManager\n .createQueryBuilder()\n .relation(classify(modelUserKey), field.name)\n .of(entityId)\n .loadMany();\n const existingIds: number[] = existingRelated.map((e) => e.id);\n\n const toAdd = resolvedIds.filter((id) => !existingIds.includes(id));\n const toRemove = existingIds.filter((id) => !resolvedIds.includes(id));\n\n if (toAdd.length > 0 || toRemove.length > 0) {\n await this.entityManager\n .createQueryBuilder()\n .relation(classify(modelUserKey), field.name)\n .of(entityId)\n .addAndRemove(toAdd, toRemove);\n }\n\n this.logger.debug(`Seeded ${field.relationType} relation ${modelUserKey}.${field.name} entityId=${entityId}: +${toAdd.length} -${toRemove.length}`);\n }\n }\n\n private async seedEntityMedia(\n entityId: number,\n modelUserKey: string,\n mediaPayload: Record<string, string>,\n ): Promise<void> {\n const mediaBasePath = process.env.TEST_UPLOADS_MEDIA_FILE_PATH;\n if (!mediaBasePath) {\n throw new Error('TEST_UPLOADS_MEDIA_FILE_PATH is not set. Cannot seed test media.');\n }\n\n const modelMetadata = await this.modelMetadataService.findOneBySingularName(modelUserKey, {\n fields: {\n model: { userKeyField: true },\n mediaStorageProvider: true,\n },\n });\n\n for (const [fieldName, fileName] of Object.entries(mediaPayload)) {\n if (!fileName) continue;\n\n const fieldMetadata = modelMetadata.fields.find((f) => f.name === fieldName);\n if (!fieldMetadata) {\n throw new Error(`Media field \"${fieldName}\" not found in loaded metadata for model ${modelUserKey}`);\n }\n if (!fieldMetadata.mediaStorageProvider) {\n throw new Error(`Media field \"${fieldName}\" in model ${modelUserKey} has no storage provider configured`);\n }\n\n const storageProviderType = fieldMetadata.mediaStorageProvider.type as MediaStorageProviderType;\n if (storageProviderType !== MediaStorageProviderType.Filesystem) {\n throw new Error(`Test media seeding supports filesystem storage only. Field \"${fieldName}\" uses \"${storageProviderType}\".`);\n }\n\n // Idempotency: skip if media already exists for this entity + field\n const existing = await this.mediaRepository.findByEntityIdAndFieldIdAndModelMetadataId(\n entityId, fieldMetadata.id, fieldMetadata.model.id,\n );\n if (existing.length > 0) {\n this.logger.debug(`Media already seeded for ${modelUserKey}.${fieldName} entityId=${entityId}, skipping`);\n continue;\n }\n\n const sourcePath = path.join(mediaBasePath, fileName);\n if (!fs.existsSync(sourcePath)) {\n throw new Error(`Test media file not found: ${sourcePath}`);\n }\n\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);\n const stream = fs.createReadStream(sourcePath);\n await storageProvider.storeStreams([[stream, fileName]], { id: entityId }, fieldMetadata);\n this.logger.debug(`Seeded media for ${modelUserKey}.${fieldName} entityId=${entityId} file=${fileName}`);\n }\n }\n\n private get entityManager(): EntityManager {\n return this.moduleRef.get(EntityManager, { strict: false });\n }\n\n private get modelMetadataService(): ModelMetadataService {\n return this.moduleRef.get(ModelMetadataService, { strict: false });\n }\n\n private get mediaRepository(): MediaRepository {\n return this.moduleRef.get(MediaRepository, { strict: false });\n }\n\n private resolveRepository(modelUserKey: string): any {\n const repoName = `${classify(modelUserKey)}Repository`;\n const providers = this.discoveryService.getProviders();\n const wrapper = providers.find((provider) => provider.name === repoName);\n const repo = wrapper?.instance;\n if (repo) {\n return repo;\n }\n\n try {\n const resolved = this.moduleRef.get(repoName as any, { strict: false });\n if (resolved) {\n return resolved;\n }\n } catch {\n // fall through\n }\n\n throw new Error(`Repository not found for model ${modelUserKey}. Expected provider: ${repoName}`);\n }\n\n private generateDbRunName(): string {\n const adjectives = [\n 'brave', 'bright', 'calm', 'clever', 'curious', 'gentle', 'jolly', 'lively', 'mighty', 'nimble',\n 'proud', 'quick', 'quiet', 'sharp', 'sly', 'steady', 'swift', 'wise', 'witty', 'zesty',\n ];\n const animals = [\n 'lion', 'tiger', 'panther', 'eagle', 'falcon', 'otter', 'wolf', 'fox', 'bear', 'badger',\n 'monkey', 'panda', 'leopard', 'whale', 'dolphin', 'rhino', 'giraffe', 'camel', 'koala', 'lynx',\n ];\n const adjective = adjectives[Math.floor(Math.random() * adjectives.length)];\n const animal = animals[Math.floor(Math.random() * animals.length)];\n return `${adjective}_${animal}`;\n }\n\n private getTimestamp(): string {\n const now = new Date();\n const pad = (value: number) => value.toString().padStart(2, '0');\n return `${now.getFullYear()}${pad(now.getMonth() + 1)}${pad(now.getDate())}${pad(now.getHours())}${pad(now.getMinutes())}${pad(now.getSeconds())}`;\n }\n\n private buildTestEnvContents(baseEnv: string, dbNameByDatasource: Map<string, string>): string {\n const datasourceNameSet = new Set(Array.from(dbNameByDatasource.keys()));\n const lines = baseEnv.split(/\\r?\\n/);\n return lines\n .map((line) => {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#') || !trimmed.includes('=')) {\n return line;\n }\n const [rawKey] = line.split('=');\n const key = rawKey.trim();\n if (!key.endsWith('_DATABASE_NAME')) {\n return line;\n }\n const prefix = key.replace(/_DATABASE_NAME$/, '').toLowerCase();\n const matchedDatasource = Array.from(datasourceNameSet).find((name) => name === prefix);\n if (!matchedDatasource) {\n return line;\n }\n const dbName = dbNameByDatasource.get(matchedDatasource);\n if (!dbName) {\n return line;\n }\n return `${key}=${dbName}`;\n })\n .join('\\n');\n }\n\n private async createTestDatabaseObjects(dbNameByDatasource: Map<string, string>): Promise<void> {\n for (const [dsName, dbName] of dbNameByDatasource.entries()) {\n const dataSource = this.resolveDataSourceByName(dsName);\n if (!dataSource.isInitialized) {\n await dataSource.initialize();\n }\n\n console.log(`Creating test database/schema \"${dbName}\" on datasource \"${dsName}\"...`);\n\n const queryRunner = dataSource.createQueryRunner();\n try {\n const type = dataSource.options.type;\n if (type === 'postgres') {\n await queryRunner.query(`CREATE DATABASE \"${dbName}\"`);\n } else if (type === 'mssql') {\n await queryRunner.query(\n `IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = '${dbName}') EXEC('CREATE SCHEMA [${dbName}]')`,\n );\n } else if (type === 'mysql' || type === 'mariadb') {\n await queryRunner.query(`CREATE DATABASE IF NOT EXISTS \\`${dbName}\\``);\n } else {\n throw new Error(`Unsupported database type for test data creation: ${type}`);\n }\n } finally {\n await queryRunner.release();\n }\n }\n }\n\n private resolveDataSourceByName(datasourceName: string): DataSource {\n const token = datasourceName ? getDataSourceToken(datasourceName) : getDataSourceToken();\n try {\n const ds = this.moduleRef.get<DataSource>(token, { strict: false });\n if (!ds) {\n throw new Error(`No DataSource found for \"${datasourceName}\"`);\n }\n return ds;\n } catch (err: any) {\n throw new Error(`Failed to resolve DataSource \"${datasourceName}\": ${err?.message ?? err}`);\n }\n }\n\n private updateTestManifest(\n dbRunName: string,\n timestamp: string,\n dbNameByDatasource: Map<string, string>,\n ): void {\n const manifestPath = path.join(process.cwd(), '.solidx-test-manifest');\n let manifest: Record<string, any> = {};\n if (fs.existsSync(manifestPath)) {\n try {\n const parsed = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));\n if (parsed && typeof parsed === 'object') {\n manifest = parsed;\n }\n } catch {\n // fall through with empty manifest\n }\n }\n\n if (!manifest.runs || typeof manifest.runs !== 'object') {\n manifest.runs = {};\n }\n\n const databases: Record<string, string> = {};\n for (const [dsName, dbName] of dbNameByDatasource.entries()) {\n databases[dsName] = dbName;\n }\n\n manifest.runs[dbRunName] = {\n createdAt: timestamp,\n databases,\n };\n\n fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));\n }\n\n private async dropTestDatabaseObjects(databases: Record<string, string>): Promise<void> {\n const entries = Object.entries(databases);\n for (const [dsName, dbName] of entries) {\n const dataSource = this.resolveDataSourceByName(dsName);\n if (!dataSource.isInitialized) {\n await dataSource.initialize();\n }\n\n console.log(`Dropping test database/schema \"${dbName}\" on datasource \"${dsName}\"...`);\n\n const queryRunner = dataSource.createQueryRunner();\n try {\n const type = dataSource.options.type;\n if (type === 'postgres') {\n await queryRunner.query(`DROP DATABASE IF EXISTS \"${dbName}\"`);\n } else if (type === 'mssql') {\n await this.dropMssqlSchema(queryRunner, dbName);\n } else if (type === 'mysql' || type === 'mariadb') {\n await queryRunner.query(`DROP DATABASE IF EXISTS \\`${dbName}\\``);\n } else {\n throw new Error(`Unsupported database type for test data deletion: ${type}`);\n }\n } finally {\n await queryRunner.release();\n }\n }\n }\n\n private async dropMssqlSchema(queryRunner: ReturnType<DataSource['createQueryRunner']>, schemaName: string): Promise<void> {\n const foreignKeys: Array<{ fk_name: string; table_name: string }> = await queryRunner.query(\n `SELECT fk.name AS fk_name, t.name AS table_name\n FROM sys.foreign_keys fk\n INNER JOIN sys.tables t ON fk.parent_object_id = t.object_id\n INNER JOIN sys.schemas s ON t.schema_id = s.schema_id\n WHERE s.name = '${schemaName}'`,\n );\n for (const fk of foreignKeys) {\n await queryRunner.query(`ALTER TABLE [${schemaName}].[${fk.table_name}] DROP CONSTRAINT [${fk.fk_name}]`);\n }\n\n const tables: Array<{ TABLE_NAME: string }> = await queryRunner.query(\n `SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '${schemaName}'`,\n );\n for (const table of tables) {\n await queryRunner.query(`DROP TABLE [${schemaName}].[${table.TABLE_NAME}]`);\n }\n\n const views: Array<{ TABLE_NAME: string }> = await queryRunner.query(\n `SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = '${schemaName}'`,\n );\n for (const view of views) {\n await queryRunner.query(`DROP VIEW [${schemaName}].[${view.TABLE_NAME}]`);\n }\n\n await queryRunner.query(`DROP SCHEMA [${schemaName}]`);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"module-test-data.service.js","sourceRoot":"","sources":["../../src/seeders/module-test-data.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport { DiscoveryService, ModuleRef } from '@nestjs/core';\nimport { getDataSourceToken } from '@nestjs/typeorm';\nimport { classify } from '@angular-devkit/core/src/utils/strings';\nimport { DataSource, EntityManager } from 'typeorm';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nimport solidCoreMetadata from './seed-data/solid-core-metadata.json';\nimport { CreateModuleMetadataDto } from 'src/dtos/create-module-metadata.dto';\nimport { CreateModelMetadataDto } from 'src/dtos/create-model-metadata.dto';\nimport { MediaStorageProviderType } from 'src/dtos/create-media-storage-provider-metadata.dto';\nimport { getDynamicModuleNamesBasedOnMetadata } from 'src/helpers/module.helper';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { MediaRepository } from 'src/repository/media.repository';\nimport { PermissionMetadataRepository } from 'src/repository/permission-metadata.repository';\nimport { AuthenticationService } from 'src/services/authentication.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { RoleMetadataService } from 'src/services/role-metadata.service';\nimport { UserService } from 'src/services/user.service';\nimport { getMediaStorageProvider } from 'src/services/mediaStorageProviders';\nimport { TestingRoleSpec, TestingUserSpec } from 'src/testing/contracts/testing-metadata.types';\n\n@Injectable()\nexport class ModuleTestDataService {\n private readonly logger = new Logger(ModuleTestDataService.name);\n\n constructor(\n private readonly moduleRef: ModuleRef,\n private readonly discoveryService: DiscoveryService,\n private readonly solidRegistry: SolidRegistry,\n ) {}\n\n async setupTestData(modulesToTest?: string[]): Promise<void> {\n const testDataFiles = this.testDataFiles;\n const filteredFiles = modulesToTest?.length ? testDataFiles.filter((file) => modulesToTest.includes(file.moduleMetadata?.name)) : testDataFiles;\n\n if (filteredFiles.length === 0) {\n this.logger.warn('No modules matched the provided modulesToTest list.');\n console.log('No modules matched the provided modulesToTest list.');\n return;\n }\n\n for (const overallMetadata of filteredFiles) {\n const moduleName = overallMetadata?.moduleMetadata?.name ?? 'unknown';\n this.logger.log(`Processing test data for module: ${moduleName}`);\n console.log(`Processing test data for module: ${moduleName}`);\n await this.seedTestData(overallMetadata);\n console.log(`✔ Test data setup complete for module: ${moduleName}`);\n }\n }\n\n async createTestDatasources(): Promise<void> {\n const manifestPath = path.join(process.cwd(), '.solidx-test-manifest');\n if (fs.existsSync(manifestPath)) {\n console.log('Existing .solidx-test-manifest found; skipping test datasource creation.');\n return;\n }\n\n const dbRunName = this.generateDbRunName();\n const timestamp = this.getTimestamp();\n const envPath = path.join(process.cwd(), '.env');\n if (!fs.existsSync(envPath)) {\n throw new Error(`Base .env file not found at ${envPath}`);\n }\n\n const datasourceNames = this.solidRegistry\n .getSolidDatabaseModules()\n .map((wrapper) => wrapper.instance?.name?.())\n .filter(Boolean)\n .map((name) => name.toLowerCase()) as string[];\n\n if (datasourceNames.length === 0) {\n throw new Error('No solid database modules registered; cannot create test datasources.');\n }\n\n const dbNameByDatasource = new Map<string, string>();\n for (const dsName of datasourceNames) {\n dbNameByDatasource.set(dsName, `${dsName}_${timestamp}_${dbRunName}`);\n }\n\n const newEnvContents = this.buildTestEnvContents(\n fs.readFileSync(envPath, 'utf-8'),\n dbNameByDatasource,\n );\n\n const backupEnvPath = path.join(process.cwd(), `.env.backup.${dbRunName}`);\n fs.copyFileSync(envPath, backupEnvPath);\n fs.writeFileSync(envPath, newEnvContents);\n console.log(`Backed up .env to ${path.basename(backupEnvPath)} and applied new test datasource names to .env.`);\n\n this.updateTestManifest(dbRunName, timestamp, dbNameByDatasource);\n\n await this.createTestDatabaseObjects(dbNameByDatasource);\n\n const dbList = Array.from(dbNameByDatasource.entries())\n .map(([dsName, dbName]) => `- ${dsName}: ${dbName}`)\n .join('\\n');\n\n const instructions = [\n '',\n '============================================================',\n ' TEST DATASOURCE ENVIRONMENT CREATED',\n '------------------------------------------------------------',\n ` Run name : ${dbRunName}`,\n ` Env backup : ${path.basename(backupEnvPath)}`,\n '',\n ' Test databases/schemas created:',\n dbList || ' (none)',\n '',\n ' Next steps:',\n ' 1) Using updated .env with test datasource names',\n ' 2) Run solid seed as usual',\n ' 3) Proceed with the next steps in the workflow',\n '============================================================',\n '',\n ].join('\\n');\n\n console.log(instructions);\n }\n\n async deleteTestDatasources(): Promise<void> {\n const manifestPath = path.join(process.cwd(), '.solidx-test-manifest');\n if (!fs.existsSync(manifestPath)) {\n this.logger.log('No .solidx-test-manifest found; nothing to delete.');\n console.log('No .solidx-test-manifest found; nothing to delete.');\n return;\n }\n\n const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8')) as {\n runs?: Record<string, { databases?: Record<string, string>; createdAt?: string }>;\n };\n const runs = manifest?.runs ?? {};\n const runNames = Object.keys(runs);\n if (runNames.length === 0) {\n fs.unlinkSync(manifestPath);\n return;\n }\n\n const latestRunName = runNames\n .slice()\n .sort((a, b) => {\n const aCreated = runs[a]?.createdAt ?? '';\n const bCreated = runs[b]?.createdAt ?? '';\n return aCreated.localeCompare(bCreated);\n })\n .pop();\n if (latestRunName) {\n const backupEnvPath = path.join(process.cwd(), `.env.backup.${latestRunName}`);\n if (fs.existsSync(backupEnvPath)) {\n fs.copyFileSync(backupEnvPath, path.join(process.cwd(), '.env'));\n console.log(`Restored .env from ${path.basename(backupEnvPath)}.`);\n fs.unlinkSync(backupEnvPath);\n }\n }\n\n for (const runName of runNames) {\n const envFileName = `.env.${runName}`;\n const envPath = path.join(process.cwd(), envFileName);\n if (fs.existsSync(envPath)) {\n fs.unlinkSync(envPath);\n }\n }\n\n for (const runName of runNames) {\n const databases = runs[runName]?.databases ?? {};\n await this.dropTestDatabaseObjects(databases);\n }\n\n fs.unlinkSync(manifestPath);\n console.log('✔ Test datasource env files and manifest deleted; test databases dropped.');\n }\n\n private get testDataFiles(): any[] {\n const typedSolidCoreMetadata = structuredClone(solidCoreMetadata);\n const testDataFiles = [typedSolidCoreMetadata];\n const enabledModules = getDynamicModuleNamesBasedOnMetadata();\n for (const enabledModule of enabledModules) {\n const enabledModuleSeedFile = `module-metadata/${enabledModule}/${enabledModule}-metadata.json`;\n const fullPath = path.join(process.cwd(), enabledModuleSeedFile);\n\n if (fs.existsSync(fullPath)) {\n const overallMetadata = JSON.parse(fs.readFileSync(fullPath, 'utf-8'));\n testDataFiles.push(overallMetadata);\n }\n }\n\n return testDataFiles;\n }\n\n private async seedTestData(overallMetadata: any): Promise<void> {\n const moduleMetadata: CreateModuleMetadataDto = overallMetadata.moduleMetadata;\n if (!moduleMetadata) {\n throw new Error('Module metadata missing from test data payload.');\n }\n\n // console.log(JSON.stringify(moduleMetadata, null, 2));\n\n const testingRoles: TestingRoleSpec[] = overallMetadata?.testing?.roles ?? [];\n const testingUsers: TestingUserSpec[] = overallMetadata?.testing?.users ?? [];\n const testingData: Array<{ modelUserKey: string; data: Record<string, any> }> = overallMetadata?.testing?.data ?? [];\n\n if (testingRoles.length > 0) {\n await this.seedTestRoles(testingRoles);\n }\n if (testingUsers.length > 0) {\n await this.seedTestUsers(testingUsers);\n }\n\n if (testingData.length === 0) {\n this.logger.debug(`No test data found for ${moduleMetadata.name}`);\n return;\n }\n\n const modelsByName = new Map<string, CreateModelMetadataDto>(\n (moduleMetadata.models ?? []).map((m) => [m.singularName, m]),\n );\n\n for (const entry of testingData) {\n const modelUserKey = entry.modelUserKey;\n const modelDef = modelsByName.get(modelUserKey);\n if (!modelDef) {\n throw new Error(`Test data modelUserKey not found in metadata: ${modelUserKey}`);\n }\n\n const entityRepo = this.resolveRepository(modelUserKey);\n const payload: Record<string, any> = { ...(entry.data ?? {}) };\n\n for (const field of modelDef.fields ?? []) {\n if (field.type === 'relation' && field.relationType === 'many-to-one') {\n const userKeyProp = `${field.name}UserKey`;\n if (!(userKeyProp in payload)) {\n continue;\n }\n\n const userKeyValue = payload[userKeyProp];\n if (userKeyValue === null || userKeyValue === undefined || userKeyValue === '') {\n delete payload[userKeyProp];\n continue;\n }\n\n const coModelName = field.relationCoModelSingularName;\n const coModelDef = coModelName ? modelsByName.get(coModelName) : null;\n if (!coModelDef) {\n throw new Error(`Test data relation model ${coModelName} not found in metadata, when attempting to resolve field ${modelDef.singularName}.${field.name}`);\n }\n const coUserKeyField = coModelDef.userKeyFieldUserKey;\n if (!coUserKeyField) {\n throw new Error(`Test data relation model ${coModelName} is missing userKeyFieldUserKey, when attempting to resolve field ${modelDef.singularName}.${field.name}`);\n }\n\n const coRepo = this.resolveRepository(coModelName);\n const related = typeof coRepo.findOneByUserKey === 'function'\n ? await coRepo.findOneByUserKey(userKeyValue)\n : await coRepo.findOne({ where: { [coUserKeyField]: userKeyValue } });\n if (!related) {\n throw new Error(`Test data relation not found: ${coModelName}.${coUserKeyField}=${userKeyValue}`);\n }\n\n payload[field.name] = related;\n delete payload[userKeyProp];\n }\n }\n\n // Strip media fields from entity payload — file paths cannot be saved as columns\n const mediaPayload: Record<string, string> = {};\n for (const field of modelDef.fields ?? []) {\n if ((field.type === 'mediaSingle' || field.type === 'mediaMultiple') && payload[field.name] !== undefined) {\n mediaPayload[field.name] = payload[field.name] as string;\n delete payload[field.name];\n }\n }\n\n // Strip many-to-many and one-to-many fields — these are resolved post-save via the relation builder\n const multiRelationPayload: Array<{ field: any; userKeys: string[] }> = [];\n for (const field of modelDef.fields ?? []) {\n if (field.type !== 'relation') continue;\n if (field.relationType !== 'many-to-many' && field.relationType !== 'one-to-many') continue;\n\n const userKeysProp = `${field.name}UserKeys`;\n if (userKeysProp in payload && Array.isArray(payload[userKeysProp])) {\n multiRelationPayload.push({ field, userKeys: payload[userKeysProp] });\n delete payload[userKeysProp];\n }\n // Remove raw field value if accidentally present\n delete payload[field.name];\n }\n\n // Upsert entity, capturing the saved result for post-save steps\n let savedEntity: any;\n const userKeyField = modelDef.userKeyFieldUserKey;\n if (userKeyField && payload[userKeyField] !== undefined) {\n const existing = await entityRepo.findOne({\n where: { [userKeyField]: payload[userKeyField] },\n });\n if (existing) {\n savedEntity = await entityRepo.save(entityRepo.merge(existing, payload));\n } else {\n savedEntity = await entityRepo.save(entityRepo.create(payload));\n }\n } else {\n savedEntity = await entityRepo.save(entityRepo.create(payload));\n }\n\n if (multiRelationPayload.length > 0) {\n await this.seedMultiRelations(savedEntity.id, modelUserKey, multiRelationPayload, modelsByName);\n }\n\n if (Object.keys(mediaPayload).length > 0) {\n await this.seedEntityMedia(savedEntity.id, modelUserKey, mediaPayload);\n }\n }\n }\n\n private async seedTestRoles(roles: TestingRoleSpec[]): Promise<void> {\n const roleService = this.moduleRef.get(RoleMetadataService, { strict: false });\n if (!roleService) {\n throw new Error('RoleMetadataService not available — cannot seed test roles.');\n }\n\n await roleService.createRolesIfNotExists(roles.map((r) => ({ name: r.name } as any)));\n\n for (const role of roles) {\n const perms = role.permissions ?? [];\n if (perms.length === 0) continue;\n\n if (perms.some((p) => p === '*')) {\n await roleService.addAllPermissionsToRole(role.name);\n this.logger.log(`Bound all permissions to test role \"${role.name}\"`);\n continue;\n }\n\n const expanded = await this.expandPermissionNames(perms);\n if (expanded.length === 0) {\n this.logger.warn(`Test role \"${role.name}\" has permissions declared but none resolved — skipping binding.`);\n continue;\n }\n\n try {\n await roleService.addPermissionsToRole(role.name, expanded);\n } catch (err: any) {\n throw new Error(\n `Failed to bind permissions to test role \"${role.name}\": ${err?.message ?? err}. ` +\n `Did you run \"solid seed\" first so controller permissions are registered?`,\n );\n }\n this.logger.log(`Bound ${expanded.length} permissions to test role \"${role.name}\"`);\n }\n }\n\n private async expandPermissionNames(permissions: string[]): Promise<string[]> {\n const permissionRepo = this.moduleRef.get(PermissionMetadataRepository, { strict: false });\n if (!permissionRepo) {\n throw new Error('PermissionMetadataRepository not available — cannot resolve test role permissions.');\n }\n\n const exact = new Set<string>();\n const prefixes: string[] = [];\n for (const entry of permissions) {\n if (!entry) continue;\n if (entry.endsWith('.*')) {\n prefixes.push(entry.slice(0, -1));\n } else {\n exact.add(entry);\n }\n }\n\n if (prefixes.length > 0) {\n const allPermissions = await permissionRepo.find();\n for (const p of allPermissions) {\n if (prefixes.some((prefix) => p.name.startsWith(prefix))) {\n exact.add(p.name);\n }\n }\n }\n\n return Array.from(exact);\n }\n\n private async seedTestUsers(users: TestingUserSpec[]): Promise<void> {\n const userService = this.moduleRef.get(UserService, { strict: false });\n const authService = this.moduleRef.get(AuthenticationService, { strict: false });\n if (!userService || !authService) {\n throw new Error('UserService / AuthenticationService not available — cannot seed test users.');\n }\n\n for (const user of users) {\n const existing = await userService.findOneByUsername(user.username);\n if (existing) {\n this.logger.debug(`Test user \"${user.username}\" already exists — skipping signUp.`);\n continue;\n }\n\n await authService.signUp({ ...user });\n this.logger.log(`Created test user \"${user.username}\"${user.roles?.length ? ` with roles [${user.roles.join(', ')}]` : ''}`);\n }\n }\n\n private async seedMultiRelations(\n entityId: number,\n modelUserKey: string,\n relations: Array<{ field: any; userKeys: string[] }>,\n modelsByName: Map<string, CreateModelMetadataDto>,\n ): Promise<void> {\n for (const { field, userKeys } of relations) {\n if (!userKeys.length) continue;\n\n const coModelName = field.relationCoModelSingularName;\n const coModelDef = modelsByName.get(coModelName);\n if (!coModelDef) {\n throw new Error(`Relation model \"${coModelName}\" not found in metadata for field ${modelUserKey}.${field.name}`);\n }\n const coUserKeyField = coModelDef.userKeyFieldUserKey;\n if (!coUserKeyField) {\n throw new Error(`Relation model \"${coModelName}\" is missing userKeyFieldUserKey, needed to resolve ${modelUserKey}.${field.name}`);\n }\n\n const coRepo = this.resolveRepository(coModelName);\n const resolvedIds: number[] = [];\n for (const uk of userKeys) {\n const related = typeof coRepo.findOneByUserKey === 'function'\n ? await coRepo.findOneByUserKey(uk)\n : await coRepo.findOne({ where: { [coUserKeyField]: uk } });\n if (!related) {\n throw new Error(`Related entity not found: ${coModelName}.${coUserKeyField}=${uk}`);\n }\n resolvedIds.push(related.id);\n }\n\n // Load currently associated entities to diff (set semantics — idempotent)\n const existingRelated: any[] = await this.entityManager\n .createQueryBuilder()\n .relation(classify(modelUserKey), field.name)\n .of(entityId)\n .loadMany();\n const existingIds: number[] = existingRelated.map((e) => e.id);\n\n const toAdd = resolvedIds.filter((id) => !existingIds.includes(id));\n const toRemove = existingIds.filter((id) => !resolvedIds.includes(id));\n\n if (toAdd.length > 0 || toRemove.length > 0) {\n await this.entityManager\n .createQueryBuilder()\n .relation(classify(modelUserKey), field.name)\n .of(entityId)\n .addAndRemove(toAdd, toRemove);\n }\n\n this.logger.debug(`Seeded ${field.relationType} relation ${modelUserKey}.${field.name} entityId=${entityId}: +${toAdd.length} -${toRemove.length}`);\n }\n }\n\n private async seedEntityMedia(\n entityId: number,\n modelUserKey: string,\n mediaPayload: Record<string, string>,\n ): Promise<void> {\n const mediaBasePath = process.env.TEST_UPLOADS_MEDIA_FILE_PATH;\n if (!mediaBasePath) {\n throw new Error('TEST_UPLOADS_MEDIA_FILE_PATH is not set. Cannot seed test media.');\n }\n\n const modelMetadata = await this.modelMetadataService.findOneBySingularName(modelUserKey, {\n fields: {\n model: { userKeyField: true },\n mediaStorageProvider: true,\n },\n });\n\n for (const [fieldName, fileName] of Object.entries(mediaPayload)) {\n if (!fileName) continue;\n\n const fieldMetadata = modelMetadata.fields.find((f) => f.name === fieldName);\n if (!fieldMetadata) {\n throw new Error(`Media field \"${fieldName}\" not found in loaded metadata for model ${modelUserKey}`);\n }\n if (!fieldMetadata.mediaStorageProvider) {\n throw new Error(`Media field \"${fieldName}\" in model ${modelUserKey} has no storage provider configured`);\n }\n\n const storageProviderType = fieldMetadata.mediaStorageProvider.type as MediaStorageProviderType;\n if (storageProviderType !== MediaStorageProviderType.Filesystem) {\n throw new Error(`Test media seeding supports filesystem storage only. Field \"${fieldName}\" uses \"${storageProviderType}\".`);\n }\n\n // Idempotency: skip if media already exists for this entity + field\n const existing = await this.mediaRepository.findByEntityIdAndFieldIdAndModelMetadataId(\n entityId, fieldMetadata.id, fieldMetadata.model.id,\n );\n if (existing.length > 0) {\n this.logger.debug(`Media already seeded for ${modelUserKey}.${fieldName} entityId=${entityId}, skipping`);\n continue;\n }\n\n const sourcePath = path.join(mediaBasePath, fileName);\n if (!fs.existsSync(sourcePath)) {\n throw new Error(`Test media file not found: ${sourcePath}`);\n }\n\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);\n const stream = fs.createReadStream(sourcePath);\n await storageProvider.storeStreams([[stream, fileName]], { id: entityId }, fieldMetadata);\n this.logger.debug(`Seeded media for ${modelUserKey}.${fieldName} entityId=${entityId} file=${fileName}`);\n }\n }\n\n private get entityManager(): EntityManager {\n return this.moduleRef.get(EntityManager, { strict: false });\n }\n\n private get modelMetadataService(): ModelMetadataService {\n return this.moduleRef.get(ModelMetadataService, { strict: false });\n }\n\n private get mediaRepository(): MediaRepository {\n return this.moduleRef.get(MediaRepository, { strict: false });\n }\n\n private resolveRepository(modelUserKey: string): any {\n const repoName = `${classify(modelUserKey)}Repository`;\n const providers = this.discoveryService.getProviders();\n const wrapper = providers.find((provider) => provider.name === repoName);\n const repo = wrapper?.instance;\n if (repo) {\n return repo;\n }\n\n try {\n const resolved = this.moduleRef.get(repoName as any, { strict: false });\n if (resolved) {\n return resolved;\n }\n } catch {\n // fall through\n }\n\n throw new Error(`Repository not found for model ${modelUserKey}. Expected provider: ${repoName}`);\n }\n\n private generateDbRunName(): string {\n const adjectives = [\n 'brave', 'bright', 'calm', 'clever', 'curious', 'gentle', 'jolly', 'lively', 'mighty', 'nimble',\n 'proud', 'quick', 'quiet', 'sharp', 'sly', 'steady', 'swift', 'wise', 'witty', 'zesty',\n ];\n const animals = [\n 'lion', 'tiger', 'panther', 'eagle', 'falcon', 'otter', 'wolf', 'fox', 'bear', 'badger',\n 'monkey', 'panda', 'leopard', 'whale', 'dolphin', 'rhino', 'giraffe', 'camel', 'koala', 'lynx',\n ];\n const adjective = adjectives[Math.floor(Math.random() * adjectives.length)];\n const animal = animals[Math.floor(Math.random() * animals.length)];\n return `${adjective}_${animal}`;\n }\n\n private getTimestamp(): string {\n const now = new Date();\n const pad = (value: number) => value.toString().padStart(2, '0');\n return `${now.getFullYear()}${pad(now.getMonth() + 1)}${pad(now.getDate())}${pad(now.getHours())}${pad(now.getMinutes())}${pad(now.getSeconds())}`;\n }\n\n private buildTestEnvContents(baseEnv: string, dbNameByDatasource: Map<string, string>): string {\n const datasourceNameSet = new Set(Array.from(dbNameByDatasource.keys()));\n const lines = baseEnv.split(/\\r?\\n/);\n return lines\n .map((line) => {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#') || !trimmed.includes('=')) {\n return line;\n }\n const [rawKey] = line.split('=');\n const key = rawKey.trim();\n if (!key.endsWith('_DATABASE_NAME')) {\n return line;\n }\n const prefix = key.replace(/_DATABASE_NAME$/, '').toLowerCase();\n const matchedDatasource = Array.from(datasourceNameSet).find((name) => name === prefix);\n if (!matchedDatasource) {\n return line;\n }\n const dbName = dbNameByDatasource.get(matchedDatasource);\n if (!dbName) {\n return line;\n }\n return `${key}=${dbName}`;\n })\n .join('\\n');\n }\n\n private async createTestDatabaseObjects(dbNameByDatasource: Map<string, string>): Promise<void> {\n for (const [dsName, dbName] of dbNameByDatasource.entries()) {\n const dataSource = this.resolveDataSourceByName(dsName);\n if (!dataSource.isInitialized) {\n await dataSource.initialize();\n }\n\n console.log(`Creating test database/schema \"${dbName}\" on datasource \"${dsName}\"...`);\n\n const queryRunner = dataSource.createQueryRunner();\n try {\n const type = dataSource.options.type;\n if (type === 'postgres') {\n await queryRunner.query(`CREATE DATABASE \"${dbName}\"`);\n } else if (type === 'mssql') {\n await queryRunner.query(\n `IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = '${dbName}') EXEC('CREATE SCHEMA [${dbName}]')`,\n );\n } else if (type === 'mysql' || type === 'mariadb') {\n await queryRunner.query(`CREATE DATABASE IF NOT EXISTS \\`${dbName}\\``);\n } else {\n throw new Error(`Unsupported database type for test data creation: ${type}`);\n }\n } finally {\n await queryRunner.release();\n }\n }\n }\n\n private resolveDataSourceByName(datasourceName: string): DataSource {\n const token = datasourceName ? getDataSourceToken(datasourceName) : getDataSourceToken();\n try {\n const ds = this.moduleRef.get<DataSource>(token, { strict: false });\n if (!ds) {\n throw new Error(`No DataSource found for \"${datasourceName}\"`);\n }\n return ds;\n } catch (err: any) {\n throw new Error(`Failed to resolve DataSource \"${datasourceName}\": ${err?.message ?? err}`);\n }\n }\n\n private updateTestManifest(\n dbRunName: string,\n timestamp: string,\n dbNameByDatasource: Map<string, string>,\n ): void {\n const manifestPath = path.join(process.cwd(), '.solidx-test-manifest');\n let manifest: Record<string, any> = {};\n if (fs.existsSync(manifestPath)) {\n try {\n const parsed = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));\n if (parsed && typeof parsed === 'object') {\n manifest = parsed;\n }\n } catch {\n // fall through with empty manifest\n }\n }\n\n if (!manifest.runs || typeof manifest.runs !== 'object') {\n manifest.runs = {};\n }\n\n const databases: Record<string, string> = {};\n for (const [dsName, dbName] of dbNameByDatasource.entries()) {\n databases[dsName] = dbName;\n }\n\n manifest.runs[dbRunName] = {\n createdAt: timestamp,\n databases,\n };\n\n fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));\n }\n\n private async dropTestDatabaseObjects(databases: Record<string, string>): Promise<void> {\n const entries = Object.entries(databases);\n for (const [dsName, dbName] of entries) {\n const dataSource = this.resolveDataSourceByName(dsName);\n if (!dataSource.isInitialized) {\n await dataSource.initialize();\n }\n\n console.log(`Dropping test database/schema \"${dbName}\" on datasource \"${dsName}\"...`);\n\n const queryRunner = dataSource.createQueryRunner();\n try {\n const type = dataSource.options.type;\n if (type === 'postgres') {\n await queryRunner.query(`DROP DATABASE IF EXISTS \"${dbName}\"`);\n } else if (type === 'mssql') {\n await this.dropMssqlSchema(queryRunner, dbName);\n } else if (type === 'mysql' || type === 'mariadb') {\n await queryRunner.query(`DROP DATABASE IF EXISTS \\`${dbName}\\``);\n } else {\n throw new Error(`Unsupported database type for test data deletion: ${type}`);\n }\n } finally {\n await queryRunner.release();\n }\n }\n }\n\n private async dropMssqlSchema(queryRunner: ReturnType<DataSource['createQueryRunner']>, schemaName: string): Promise<void> {\n const foreignKeys: Array<{ fk_name: string; table_name: string }> = await queryRunner.query(\n `SELECT fk.name AS fk_name, t.name AS table_name\n FROM sys.foreign_keys fk\n INNER JOIN sys.tables t ON fk.parent_object_id = t.object_id\n INNER JOIN sys.schemas s ON t.schema_id = s.schema_id\n WHERE s.name = '${schemaName}'`,\n );\n for (const fk of foreignKeys) {\n await queryRunner.query(`ALTER TABLE [${schemaName}].[${fk.table_name}] DROP CONSTRAINT [${fk.fk_name}]`);\n }\n\n const tables: Array<{ TABLE_NAME: string }> = await queryRunner.query(\n `SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '${schemaName}'`,\n );\n for (const table of tables) {\n await queryRunner.query(`DROP TABLE [${schemaName}].[${table.TABLE_NAME}]`);\n }\n\n const views: Array<{ TABLE_NAME: string }> = await queryRunner.query(\n `SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = '${schemaName}'`,\n );\n for (const view of views) {\n await queryRunner.query(`DROP VIEW [${schemaName}].[${view.TABLE_NAME}]`);\n }\n\n await queryRunner.query(`DROP SCHEMA [${schemaName}]`);\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SolidRegistry } from '
|
|
2
|
-
import { PermissionMetadataRepository } from '
|
|
1
|
+
import { SolidRegistry } from '../helpers/solid-registry';
|
|
2
|
+
import { PermissionMetadataRepository } from '../repository/permission-metadata.repository';
|
|
3
3
|
import { RoleMetadataService } from '../services/role-metadata.service';
|
|
4
4
|
export declare class PermissionMetadataSeederService {
|
|
5
5
|
private readonly permissionRepo;
|
|
@@ -5905,6 +5905,10 @@
|
|
|
5905
5905
|
}
|
|
5906
5906
|
]
|
|
5907
5907
|
},
|
|
5908
|
+
"permissions": [
|
|
5909
|
+
"mcp:invoke",
|
|
5910
|
+
"agent:invoke"
|
|
5911
|
+
],
|
|
5908
5912
|
"roles": [
|
|
5909
5913
|
{
|
|
5910
5914
|
"name": "Admin"
|
|
@@ -5961,7 +5965,9 @@
|
|
|
5961
5965
|
"AgentSessionController.findMany",
|
|
5962
5966
|
"AgentSessionController.findOne",
|
|
5963
5967
|
"AgentEventController.findMany",
|
|
5964
|
-
"AgentEventController.findOne"
|
|
5968
|
+
"AgentEventController.findOne",
|
|
5969
|
+
"mcp:invoke",
|
|
5970
|
+
"agent:invoke"
|
|
5965
5971
|
]
|
|
5966
5972
|
},
|
|
5967
5973
|
{
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ModelMetadataHelperService } from "
|
|
2
|
-
import { FieldMetadataRepository } from "
|
|
3
|
-
import { ModelMetadataRepository } from "
|
|
1
|
+
import { ModelMetadataHelperService } from "../helpers/model-metadata-helper.service";
|
|
2
|
+
import { FieldMetadataRepository } from "../repository/field-metadata.repository";
|
|
3
|
+
import { ModelMetadataRepository } from "../repository/model-metadata.repository";
|
|
4
4
|
export declare class SystemFieldsSeederService {
|
|
5
5
|
private readonly modelHelperService;
|
|
6
6
|
private readonly modelRepository;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ModuleRef } from "@nestjs/core";
|
|
2
|
-
import { CRUDService } from '
|
|
2
|
+
import { CRUDService } from '../services/crud.service';
|
|
3
3
|
import { EntityManager } from 'typeorm';
|
|
4
|
-
import { ActionMetadataRepository } from '
|
|
4
|
+
import { ActionMetadataRepository } from '../repository/action-metadata.repository';
|
|
5
5
|
import { ActionMetadata } from '../entities/action-metadata.entity';
|
|
6
6
|
export declare class ActionMetadataService extends CRUDService<ActionMetadata> {
|
|
7
7
|
readonly entityManager: EntityManager;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ModuleRef } from '@nestjs/core';
|
|
2
|
-
import { AgentEvent } from '
|
|
3
|
-
import { AgentEventRepository } from '
|
|
2
|
+
import { AgentEvent } from '../entities/agent-event.entity';
|
|
3
|
+
import { AgentEventRepository } from '../repository/agent-event.repository';
|
|
4
4
|
import { EntityManager } from 'typeorm';
|
|
5
5
|
import { CRUDService } from './crud.service';
|
|
6
6
|
export declare class AgentEventService extends CRUDService<AgentEvent> {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ModuleRef } from '@nestjs/core';
|
|
2
|
-
import { AgentSession } from '
|
|
3
|
-
import { AgentSessionRepository } from '
|
|
2
|
+
import { AgentSession } from '../entities/agent-session.entity';
|
|
3
|
+
import { AgentSessionRepository } from '../repository/agent-session.repository';
|
|
4
4
|
import { EntityManager } from 'typeorm';
|
|
5
5
|
import { CRUDService } from './crud.service';
|
|
6
6
|
export declare class AgentSessionService extends CRUDService<AgentSession> {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ModuleRef } from "@nestjs/core";
|
|
2
2
|
import { EntityManager } from 'typeorm';
|
|
3
|
-
import { InvokeAiPromptDto } from '
|
|
4
|
-
import { McpResponse, TriggerMcpClientOptions } from '
|
|
5
|
-
import { AiInteractionRepository } from '
|
|
6
|
-
import { CRUDService } from '
|
|
3
|
+
import { InvokeAiPromptDto } from '../dtos/invoke-ai-prompt.dto';
|
|
4
|
+
import { McpResponse, TriggerMcpClientOptions } from '../interfaces';
|
|
5
|
+
import { AiInteractionRepository } from '../repository/ai-interaction.repository';
|
|
6
|
+
import { CRUDService } from '../services/crud.service';
|
|
7
7
|
import { AiInteraction } from '../entities/ai-interaction.entity';
|
|
8
8
|
import { McpHandlerFactory } from './genai/mcp-handlers/mcp-handler-factory.service';
|
|
9
9
|
import { PublisherFactory } from './queues/publisher-factory.service';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { CreateApiKeyDto } from '
|
|
2
|
-
import { UpdateApiKeyDto } from '
|
|
3
|
-
import { UserApiKey } from '
|
|
4
|
-
import { ActiveUserData } from '
|
|
5
|
-
import { UserApiKeyRepository } from '
|
|
6
|
-
import { PermissionMetadataService } from '
|
|
1
|
+
import { CreateApiKeyDto } from '../dtos/create-api-key.dto';
|
|
2
|
+
import { UpdateApiKeyDto } from '../dtos/update-api-key.dto';
|
|
3
|
+
import { UserApiKey } from '../entities/user-api-key.entity';
|
|
4
|
+
import { ActiveUserData } from '../interfaces/active-user-data.interface';
|
|
5
|
+
import { UserApiKeyRepository } from '../repository/user-api-key.repository';
|
|
6
|
+
import { PermissionMetadataService } from '../services/permission-metadata.service';
|
|
7
7
|
export declare class ApiKeyService {
|
|
8
8
|
private readonly apiKeyRepository;
|
|
9
9
|
private readonly permissionMetadataService;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { HttpService } from '@nestjs/axios';
|
|
2
2
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
3
3
|
import { JwtService } from '@nestjs/jwt';
|
|
4
|
-
import { CreateUserDto } from '
|
|
5
|
-
import { MailFactory } from '
|
|
6
|
-
import { UserRepository } from '
|
|
4
|
+
import { CreateUserDto } from '../dtos/create-user.dto';
|
|
5
|
+
import { MailFactory } from '../factories/mail.factory';
|
|
6
|
+
import { UserRepository } from '../repository/user.repository';
|
|
7
7
|
import { DataSource, Repository } from 'typeorm';
|
|
8
8
|
import { ChangePasswordDto } from "../dtos/change-password.dto";
|
|
9
9
|
import { ConfirmForgotPasswordDto } from '../dtos/confirm-forgot-password.dto';
|
|
@@ -23,7 +23,8 @@ import { RoleMetadataService } from './role-metadata.service';
|
|
|
23
23
|
import { SettingService } from './setting.service';
|
|
24
24
|
import { UserActivityHistoryService } from './user-activity-history.service';
|
|
25
25
|
import { UserService } from './user.service';
|
|
26
|
-
import { SmsFactory } from '
|
|
26
|
+
import { SmsFactory } from '../factories/sms.factory';
|
|
27
|
+
import { SolidRegistry } from '../helpers/solid-registry';
|
|
27
28
|
export declare class AuthenticationService {
|
|
28
29
|
private readonly userService;
|
|
29
30
|
private readonly userRepository;
|
|
@@ -39,15 +40,18 @@ export declare class AuthenticationService {
|
|
|
39
40
|
private readonly userActivityHistoryService;
|
|
40
41
|
private readonly ssoCodeStorage;
|
|
41
42
|
private readonly dataSource;
|
|
43
|
+
private readonly solidRegistry;
|
|
42
44
|
private readonly logger;
|
|
43
|
-
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);
|
|
45
|
+
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);
|
|
44
46
|
private getCompanyLogo;
|
|
45
47
|
resolveUser(username: string, email: string): Promise<User>;
|
|
46
48
|
updatePasswordDetails(user: User, newPassword: string): Promise<User>;
|
|
47
49
|
resolveUserByVerificationToken(token: string): Promise<User>;
|
|
48
50
|
private validateUserForPasswordLogin;
|
|
49
51
|
private rehashPasswordIfRequired;
|
|
50
|
-
|
|
52
|
+
private static readonly SIGNUP_DTO_KEYS;
|
|
53
|
+
signUp(signUpDto: SignUpDto & Record<string, any>, activeUser?: ActiveUserData): Promise<User>;
|
|
54
|
+
private performSignUp;
|
|
51
55
|
signupForExtensionUser<T extends User, U extends CreateUserDto>(signUpDto: SignUpDto, extensionUserDto: U, extensionUserRepo: Repository<T>): Promise<T>;
|
|
52
56
|
private populateForSignup;
|
|
53
57
|
private handlePostSignup;
|
|
@@ -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;AAMzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAOjD,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,EAAgC,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AAClH,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;
|
|
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 solid_registry_1 = require("../helpers/solid-registry");
|
|
41
42
|
var LoginProvider;
|
|
42
43
|
(function (LoginProvider) {
|
|
43
44
|
LoginProvider["LOCAL"] = "local";
|
|
@@ -45,7 +46,7 @@ var LoginProvider;
|
|
|
45
46
|
LoginProvider["OTP"] = "otp";
|
|
46
47
|
})(LoginProvider || (LoginProvider = {}));
|
|
47
48
|
let AuthenticationService = AuthenticationService_1 = class AuthenticationService {
|
|
48
|
-
constructor(userService, userRepository, hashingService, jwtService, refreshTokenIdsStorage, httpService, mailServiceFactory, smsFactory, eventEmitter, settingService, roleMetadataService, userActivityHistoryService, ssoCodeStorage, dataSource) {
|
|
49
|
+
constructor(userService, userRepository, hashingService, jwtService, refreshTokenIdsStorage, httpService, mailServiceFactory, smsFactory, eventEmitter, settingService, roleMetadataService, userActivityHistoryService, ssoCodeStorage, dataSource, solidRegistry) {
|
|
49
50
|
this.userService = userService;
|
|
50
51
|
this.userRepository = userRepository;
|
|
51
52
|
this.hashingService = hashingService;
|
|
@@ -60,6 +61,7 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
|
|
|
60
61
|
this.userActivityHistoryService = userActivityHistoryService;
|
|
61
62
|
this.ssoCodeStorage = ssoCodeStorage;
|
|
62
63
|
this.dataSource = dataSource;
|
|
64
|
+
this.solidRegistry = solidRegistry;
|
|
63
65
|
this.logger = new common_1.Logger(AuthenticationService_1.name);
|
|
64
66
|
}
|
|
65
67
|
async getCompanyLogo() {
|
|
@@ -112,18 +114,31 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
|
|
|
112
114
|
}
|
|
113
115
|
}
|
|
114
116
|
async signUp(signUpDto, activeUser = null) {
|
|
117
|
+
const hasExtensionFields = Object.keys(signUpDto).some(k => !AuthenticationService_1.SIGNUP_DTO_KEYS.has(k));
|
|
118
|
+
if (hasExtensionFields) {
|
|
119
|
+
const provider = this.solidRegistry.getExtensionUserCreationProvider();
|
|
120
|
+
if (!provider) {
|
|
121
|
+
throw new common_1.InternalServerErrorException('No ExtensionUserCreationProvider registered. Register one to handle extension user creation.');
|
|
122
|
+
}
|
|
123
|
+
const entity = await provider.buildExtensionEntity(signUpDto);
|
|
124
|
+
const effectiveDto = { ...signUpDto, roles: provider.roles(signUpDto) };
|
|
125
|
+
return this.performSignUp(effectiveDto, entity, provider.repo);
|
|
126
|
+
}
|
|
127
|
+
return this.performSignUp(signUpDto, new user_entity_1.User(), this.userRepository);
|
|
128
|
+
}
|
|
129
|
+
async performSignUp(signUpDto, entity, repo) {
|
|
115
130
|
try {
|
|
116
131
|
const onForcePasswordChange = this.settingService.getConfigValue('forceChangePasswordOnFirstLogin');
|
|
117
132
|
const activateUserOnRegistration = this.settingService.getConfigValue('activateUserOnRegistration');
|
|
118
133
|
const defaultRole = this.settingService.getConfigValue('defaultRole');
|
|
119
|
-
var { user, pwd, autoGeneratedPwd } = await this.populateForSignup(
|
|
134
|
+
var { user, pwd, autoGeneratedPwd } = await this.populateForSignup(entity, signUpDto, activateUserOnRegistration, onForcePasswordChange);
|
|
120
135
|
const privateDto = signUpDto;
|
|
121
136
|
if (privateDto.isAllowedToGenerateApiKeys !== undefined) {
|
|
122
137
|
user.isAllowedToGenerateApiKeys = privateDto.isAllowedToGenerateApiKeys;
|
|
123
138
|
}
|
|
124
|
-
const savedUser = await
|
|
139
|
+
const savedUser = await repo.save(user);
|
|
125
140
|
const userRoles = signUpDto.roles ?? [];
|
|
126
|
-
if (signUpDto.username !== 'sa' && defaultRole) {
|
|
141
|
+
if ((signUpDto.roles?.length ?? 0) === 0 && signUpDto.username !== 'sa' && defaultRole) {
|
|
127
142
|
userRoles.push(defaultRole);
|
|
128
143
|
}
|
|
129
144
|
await this.handlePostSignup(savedUser, userRoles, pwd, autoGeneratedPwd);
|
|
@@ -132,27 +147,14 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
|
|
|
132
147
|
catch (err) {
|
|
133
148
|
const pgUniqueViolationErrorCode = '23505';
|
|
134
149
|
if (err.code === pgUniqueViolationErrorCode) {
|
|
135
|
-
throw new common_1.ConflictException(error_messages_1.ERROR_MESSAGES.
|
|
150
|
+
throw new common_1.ConflictException(parseUniqueConstraintError(err.detail || error_messages_1.ERROR_MESSAGES.UNIQUE_CONSTRAINT_VIOLATION));
|
|
136
151
|
}
|
|
137
152
|
throw err;
|
|
138
153
|
}
|
|
139
154
|
}
|
|
140
155
|
async signupForExtensionUser(signUpDto, extensionUserDto, extensionUserRepo) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
const extensionUser = extensionUserRepo.merge(extensionUserRepo.create(), extensionUserDto);
|
|
144
|
-
var { user, pwd, autoGeneratedPwd } = await this.populateForSignup(extensionUser, signUpDto, extensionUserDto.active ?? true, onForcePasswordChange);
|
|
145
|
-
const savedUser = await extensionUserRepo.save(user);
|
|
146
|
-
await this.handlePostSignup(savedUser, signUpDto.roles, pwd, autoGeneratedPwd);
|
|
147
|
-
return savedUser;
|
|
148
|
-
}
|
|
149
|
-
catch (err) {
|
|
150
|
-
const pgUniqueViolationErrorCode = '23505';
|
|
151
|
-
if (err.code === pgUniqueViolationErrorCode) {
|
|
152
|
-
throw new common_1.ConflictException(parseUniqueConstraintError(err.detail || error_messages_1.ERROR_MESSAGES.UNIQUE_CONSTRAINT_VIOLATION));
|
|
153
|
-
}
|
|
154
|
-
throw err;
|
|
155
|
-
}
|
|
156
|
+
const entity = extensionUserRepo.merge(extensionUserRepo.create(), extensionUserDto);
|
|
157
|
+
return this.performSignUp(signUpDto, entity, extensionUserRepo);
|
|
156
158
|
}
|
|
157
159
|
async populateForSignup(user, signUpDto, isUserActive = true, onForcePasswordChange) {
|
|
158
160
|
let autoGeneratedPwdPermission = this.settingService.getConfigValue('iamAutoGeneratedPassword');
|
|
@@ -1069,6 +1071,7 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
|
|
|
1069
1071
|
}
|
|
1070
1072
|
};
|
|
1071
1073
|
exports.AuthenticationService = AuthenticationService;
|
|
1074
|
+
AuthenticationService.SIGNUP_DTO_KEYS = new Set(['username', 'email', 'password', 'fullName', 'mobile', 'roles', 'forcePasswordChange']);
|
|
1072
1075
|
exports.AuthenticationService = AuthenticationService = AuthenticationService_1 = __decorate([
|
|
1073
1076
|
(0, common_1.Injectable)(),
|
|
1074
1077
|
__param(13, (0, typeorm_1.InjectDataSource)()),
|
|
@@ -1085,7 +1088,8 @@ exports.AuthenticationService = AuthenticationService = AuthenticationService_1
|
|
|
1085
1088
|
role_metadata_service_1.RoleMetadataService,
|
|
1086
1089
|
user_activity_history_service_1.UserActivityHistoryService,
|
|
1087
1090
|
sso_code_storage_service_1.SsoCodeStorageService,
|
|
1088
|
-
typeorm_2.DataSource
|
|
1091
|
+
typeorm_2.DataSource,
|
|
1092
|
+
solid_registry_1.SolidRegistry])
|
|
1089
1093
|
], AuthenticationService);
|
|
1090
1094
|
function parseUniqueConstraintError(detail) {
|
|
1091
1095
|
const match = detail.match(/Key \(([^)]+)\)=\(([^)]+)\) already exists\./);
|