@solidxai/core 0.1.13-beta.2 → 0.1.13-beta.20
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/CHANGELOG.md +9517 -0
- package/README.md +19 -0
- package/dist/commands/run-tests.command.d.ts +9 -1
- package/dist/commands/run-tests.command.d.ts.map +1 -1
- package/dist/commands/run-tests.command.js +69 -6
- package/dist/commands/run-tests.command.js.map +1 -1
- package/dist/commands/seed.command.d.ts +2 -0
- package/dist/commands/seed.command.d.ts.map +1 -1
- package/dist/commands/seed.command.js +21 -0
- package/dist/commands/seed.command.js.map +1 -1
- package/dist/config/cache.options.d.ts.map +1 -1
- package/dist/config/cache.options.js +2 -2
- package/dist/config/cache.options.js.map +1 -1
- package/dist/constants/chatter-message.constants.d.ts +1 -0
- package/dist/constants/chatter-message.constants.d.ts.map +1 -1
- package/dist/constants/chatter-message.constants.js +3 -1
- package/dist/constants/chatter-message.constants.js.map +1 -1
- package/dist/constants/draft-publish-fields.d.ts +2 -0
- package/dist/constants/draft-publish-fields.d.ts.map +1 -0
- package/dist/constants/draft-publish-fields.js +5 -0
- package/dist/constants/draft-publish-fields.js.map +1 -0
- package/dist/constants/error-messages.d.ts +7 -0
- package/dist/constants/error-messages.d.ts.map +1 -1
- package/dist/constants/error-messages.js +7 -0
- package/dist/constants/error-messages.js.map +1 -1
- package/dist/constants/media-file-types.d.ts +12 -0
- package/dist/constants/media-file-types.d.ts.map +1 -1
- package/dist/constants/media-file-types.js +65 -1
- package/dist/constants/media-file-types.js.map +1 -1
- package/dist/constants/success-messages.d.ts +3 -0
- package/dist/constants/success-messages.d.ts.map +1 -1
- package/dist/constants/success-messages.js +3 -0
- package/dist/constants/success-messages.js.map +1 -1
- package/dist/constants/user.constants.d.ts +2 -0
- package/dist/constants/user.constants.d.ts.map +1 -0
- package/dist/constants/user.constants.js +5 -0
- package/dist/constants/user.constants.js.map +1 -0
- package/dist/controllers/action-metadata.controller.d.ts +1 -1
- package/dist/controllers/action-metadata.controller.js +1 -1
- package/dist/controllers/agent-event.controller.d.ts +1 -1
- package/dist/controllers/agent-event.controller.js +1 -1
- package/dist/controllers/agent-session.controller.d.ts +1 -1
- package/dist/controllers/agent-session.controller.js +1 -1
- package/dist/controllers/authentication.controller.d.ts +1 -1
- package/dist/controllers/authentication.controller.d.ts.map +1 -1
- package/dist/controllers/authentication.controller.js +4 -3
- package/dist/controllers/authentication.controller.js.map +1 -1
- package/dist/controllers/chatter-message.controller.d.ts +5 -0
- package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
- package/dist/controllers/chatter-message.controller.js +14 -0
- package/dist/controllers/chatter-message.controller.js.map +1 -1
- package/dist/controllers/dashboard-user-layout.controller.d.ts +1 -1
- package/dist/controllers/dashboard-user-layout.controller.js +1 -1
- package/dist/controllers/email-template.controller.d.ts +1 -1
- package/dist/controllers/email-template.controller.js +1 -1
- package/dist/controllers/export-template.controller.d.ts +1 -1
- package/dist/controllers/export-template.controller.d.ts.map +1 -1
- package/dist/controllers/export-template.controller.js +6 -4
- package/dist/controllers/export-template.controller.js.map +1 -1
- package/dist/controllers/export-transaction.controller.d.ts +1 -1
- package/dist/controllers/export-transaction.controller.js +1 -1
- package/dist/controllers/field-metadata.controller.d.ts +2 -2
- package/dist/controllers/import-transaction-error-log.controller.d.ts +1 -1
- package/dist/controllers/import-transaction-error-log.controller.js +1 -1
- package/dist/controllers/import-transaction.controller.d.ts +1 -1
- package/dist/controllers/import-transaction.controller.d.ts.map +1 -1
- package/dist/controllers/import-transaction.controller.js +7 -7
- package/dist/controllers/import-transaction.controller.js.map +1 -1
- package/dist/controllers/list-of-values.controller.d.ts +1 -1
- package/dist/controllers/list-of-values.controller.js +1 -1
- package/dist/controllers/locale.controller.d.ts +1 -1
- package/dist/controllers/locale.controller.js +1 -1
- package/dist/controllers/mcp-audit-log.controller.d.ts +1 -1
- package/dist/controllers/mcp-audit-log.controller.js +1 -1
- package/dist/controllers/media.controller.d.ts +2 -2
- package/dist/controllers/media.controller.d.ts.map +1 -1
- package/dist/controllers/media.controller.js +13 -8
- package/dist/controllers/media.controller.js.map +1 -1
- package/dist/controllers/menu-item-metadata.controller.d.ts +1 -1
- package/dist/controllers/menu-item-metadata.controller.js +1 -1
- package/dist/controllers/model-sequence.controller.d.ts +1 -1
- package/dist/controllers/model-sequence.controller.js +1 -1
- package/dist/controllers/module-package.controller.d.ts.map +1 -1
- package/dist/controllers/module-package.controller.js +2 -3
- package/dist/controllers/module-package.controller.js.map +1 -1
- package/dist/controllers/mpin-authentication.controller.d.ts +44 -0
- package/dist/controllers/mpin-authentication.controller.d.ts.map +1 -0
- package/dist/controllers/mpin-authentication.controller.js +102 -0
- package/dist/controllers/mpin-authentication.controller.js.map +1 -0
- package/dist/controllers/mq-message-queue.controller.d.ts +1 -1
- package/dist/controllers/mq-message-queue.controller.js +1 -1
- package/dist/controllers/mq-message.controller.d.ts +1 -1
- package/dist/controllers/mq-message.controller.js +1 -1
- package/dist/controllers/permission-metadata.controller.d.ts +1 -1
- package/dist/controllers/permission-metadata.controller.js +1 -1
- package/dist/controllers/role-metadata.controller.d.ts +1 -1
- package/dist/controllers/role-metadata.controller.js +1 -1
- package/dist/controllers/saved-filters.controller.d.ts +1 -1
- package/dist/controllers/saved-filters.controller.js +1 -1
- package/dist/controllers/scheduled-job.controller.d.ts +1 -1
- package/dist/controllers/scheduled-job.controller.js +1 -1
- package/dist/controllers/security-rule.controller.d.ts +1 -1
- package/dist/controllers/security-rule.controller.js +1 -1
- package/dist/controllers/sms-template.controller.d.ts +1 -1
- package/dist/controllers/sms-template.controller.js +1 -1
- package/dist/controllers/user-activity-history.controller.d.ts +1 -1
- package/dist/controllers/user-activity-history.controller.js +1 -1
- package/dist/controllers/user-view-metadata.controller.d.ts +1 -1
- package/dist/controllers/user-view-metadata.controller.js +1 -1
- package/dist/controllers/user.controller.d.ts +2 -2
- package/dist/controllers/user.controller.js +2 -2
- package/dist/controllers/view-metadata.controller.d.ts +2 -2
- package/dist/controllers/view-metadata.controller.js +1 -1
- package/dist/controllers/workflow-definition.controller.d.ts +1 -1
- package/dist/controllers/workflow-definition.controller.js +1 -1
- package/dist/controllers/workflow-execution-artifact.controller.d.ts +1 -1
- package/dist/controllers/workflow-execution-artifact.controller.js +1 -1
- package/dist/controllers/workflow-execution-log.controller.d.ts +1 -1
- package/dist/controllers/workflow-execution-log.controller.js +1 -1
- package/dist/controllers/workflow-execution.controller.d.ts +1 -1
- package/dist/controllers/workflow-execution.controller.js +1 -1
- package/dist/controllers/workflow-secret.controller.d.ts +1 -1
- package/dist/controllers/workflow-secret.controller.js +1 -1
- package/dist/controllers/workflow-step-execution.controller.d.ts +1 -1
- package/dist/controllers/workflow-step-execution.controller.js +1 -1
- package/dist/controllers/workflow-trigger-execution.controller.d.ts +1 -1
- package/dist/controllers/workflow-trigger-execution.controller.js +1 -1
- package/dist/dtos/basic-filters.dto.d.ts +0 -1
- package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
- package/dist/dtos/basic-filters.dto.js +1 -6
- package/dist/dtos/basic-filters.dto.js.map +1 -1
- package/dist/dtos/change-mpin.dto.d.ts +6 -0
- package/dist/dtos/change-mpin.dto.d.ts.map +1 -0
- package/dist/dtos/change-mpin.dto.js +39 -0
- package/dist/dtos/change-mpin.dto.js.map +1 -0
- package/dist/dtos/create-field-metadata.dto.d.ts +2 -6
- package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-field-metadata.dto.js +4 -10
- package/dist/dtos/create-field-metadata.dto.js.map +1 -1
- package/dist/dtos/create-model-sequence.dto.d.ts +1 -1
- package/dist/dtos/create-model-sequence.dto.d.ts.map +1 -1
- package/dist/dtos/create-model-sequence.dto.js +1 -1
- package/dist/dtos/create-model-sequence.dto.js.map +1 -1
- package/dist/dtos/mpin-login.dto.d.ts +5 -0
- package/dist/dtos/mpin-login.dto.d.ts.map +1 -0
- package/dist/dtos/mpin-login.dto.js +33 -0
- package/dist/dtos/mpin-login.dto.js.map +1 -0
- package/dist/dtos/setup-mpin.dto.d.ts +7 -0
- package/dist/dtos/setup-mpin.dto.d.ts.map +1 -0
- package/dist/dtos/setup-mpin.dto.js +47 -0
- package/dist/dtos/setup-mpin.dto.js.map +1 -0
- package/dist/entities/common.entity.d.ts +4 -0
- package/dist/entities/common.entity.d.ts.map +1 -1
- package/dist/entities/common.entity.js +25 -1
- package/dist/entities/common.entity.js.map +1 -1
- package/dist/entities/dashboard-user-layout.entity.js +2 -2
- package/dist/entities/dashboard-user-layout.entity.js.map +1 -1
- package/dist/entities/saved-filters.entity.js +3 -3
- package/dist/entities/saved-filters.entity.js.map +1 -1
- package/dist/entities/user-device-credential.entity.d.ts +18 -0
- package/dist/entities/user-device-credential.entity.d.ts.map +1 -0
- package/dist/entities/user-device-credential.entity.js +91 -0
- package/dist/entities/user-device-credential.entity.js.map +1 -0
- package/dist/entities/user.entity.d.ts.map +1 -1
- package/dist/entities/user.entity.js +36 -0
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/entities/view-metadata.entity.js.map +1 -1
- package/dist/entities/workflow-execution-artifact.entity.d.ts.map +1 -1
- package/dist/entities/workflow-execution-artifact.entity.js +4 -3
- package/dist/entities/workflow-execution-artifact.entity.js.map +1 -1
- package/dist/entities/workflow-execution-log.entity.d.ts.map +1 -1
- package/dist/entities/workflow-execution-log.entity.js +4 -3
- package/dist/entities/workflow-execution-log.entity.js.map +1 -1
- package/dist/entities/workflow-execution.entity.d.ts.map +1 -1
- package/dist/entities/workflow-execution.entity.js +3 -2
- package/dist/entities/workflow-execution.entity.js.map +1 -1
- package/dist/entities/workflow-secret.entity.d.ts.map +1 -1
- package/dist/entities/workflow-secret.entity.js +3 -2
- package/dist/entities/workflow-secret.entity.js.map +1 -1
- package/dist/entities/workflow-step-execution.entity.d.ts.map +1 -1
- package/dist/entities/workflow-step-execution.entity.js +3 -2
- package/dist/entities/workflow-step-execution.entity.js.map +1 -1
- package/dist/entities/workflow-trigger-execution.entity.d.ts.map +1 -1
- package/dist/entities/workflow-trigger-execution.entity.js +7 -6
- package/dist/entities/workflow-trigger-execution.entity.js.map +1 -1
- package/dist/factories/mail.factory.d.ts.map +1 -1
- package/dist/factories/mail.factory.js +4 -0
- package/dist/factories/mail.factory.js.map +1 -1
- package/dist/filters/http-exception.filter.d.ts.map +1 -1
- package/dist/filters/http-exception.filter.js +5 -1
- package/dist/filters/http-exception.filter.js.map +1 -1
- package/dist/helpers/bootstrap.helper.d.ts +5 -2
- package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
- package/dist/helpers/bootstrap.helper.js +7 -3
- package/dist/helpers/bootstrap.helper.js.map +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts +1 -0
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +18 -11
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
- package/dist/helpers/file-download.helper.d.ts +9 -0
- package/dist/helpers/file-download.helper.d.ts.map +1 -0
- package/dist/helpers/file-download.helper.js +19 -0
- package/dist/helpers/file-download.helper.js.map +1 -0
- package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
- package/dist/helpers/model-metadata-helper.service.js +30 -1
- package/dist/helpers/model-metadata-helper.service.js.map +1 -1
- package/dist/helpers/security.helper.d.ts +5 -1
- package/dist/helpers/security.helper.d.ts.map +1 -1
- package/dist/helpers/security.helper.js +15 -4
- package/dist/helpers/security.helper.js.map +1 -1
- package/dist/helpers/solid-core-error-codes-provider.service.d.ts.map +1 -1
- package/dist/helpers/solid-core-error-codes-provider.service.js +45 -0
- package/dist/helpers/solid-core-error-codes-provider.service.js.map +1 -1
- package/dist/helpers/solid-microservice-adapter.service.d.ts.map +1 -1
- package/dist/helpers/solid-microservice-adapter.service.js +1 -1
- package/dist/helpers/solid-microservice-adapter.service.js.map +1 -1
- package/dist/helpers/solid-registry.js +1 -1
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/helpers/typeorm-db-helper.d.ts.map +1 -1
- package/dist/helpers/typeorm-db-helper.js +9 -0
- package/dist/helpers/typeorm-db-helper.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/active-user-data.interface.d.ts +1 -0
- package/dist/interfaces/active-user-data.interface.d.ts.map +1 -1
- package/dist/interfaces/active-user-data.interface.js.map +1 -1
- package/dist/interfaces.d.ts +1 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/repository/user-device-credential.repository.d.ts +12 -0
- package/dist/repository/user-device-credential.repository.d.ts.map +1 -0
- package/dist/repository/user-device-credential.repository.js +34 -0
- package/dist/repository/user-device-credential.repository.js.map +1 -0
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +51 -30
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/module-test-data.service.d.ts +3 -1
- package/dist/seeders/module-test-data.service.d.ts.map +1 -1
- package/dist/seeders/module-test-data.service.js +8 -2
- package/dist/seeders/module-test-data.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +290 -78
- package/dist/services/api-key.service.d.ts.map +1 -1
- package/dist/services/api-key.service.js +1 -1
- package/dist/services/api-key.service.js.map +1 -1
- package/dist/services/authentication.service.d.ts +9 -5
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +102 -23
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts +15 -1
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +56 -4
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/crud-helper.service.d.ts +6 -4
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +32 -48
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/crud.service.d.ts +13 -1
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +93 -68
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/datasource-introspection.service.d.ts.map +1 -1
- package/dist/services/datasource-introspection.service.js.map +1 -1
- package/dist/services/draft-publish-helper.service.d.ts +53 -0
- package/dist/services/draft-publish-helper.service.d.ts.map +1 -0
- package/dist/services/draft-publish-helper.service.js +402 -0
- package/dist/services/draft-publish-helper.service.js.map +1 -0
- package/dist/services/field-metadata.service.d.ts +2 -2
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js +2 -1
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/internationalisation-helper.service.d.ts +19 -0
- package/dist/services/internationalisation-helper.service.d.ts.map +1 -0
- package/dist/services/internationalisation-helper.service.js +107 -0
- package/dist/services/internationalisation-helper.service.js.map +1 -0
- package/dist/services/locale.service.d.ts +1 -1
- package/dist/services/media-storage.utils.d.ts +1 -0
- package/dist/services/media-storage.utils.d.ts.map +1 -1
- package/dist/services/media-storage.utils.js +12 -1
- package/dist/services/media-storage.utils.js.map +1 -1
- package/dist/services/media.service.d.ts +3 -2
- package/dist/services/media.service.d.ts.map +1 -1
- package/dist/services/media.service.js +44 -29
- package/dist/services/media.service.js.map +1 -1
- package/dist/services/metadata-validation.service.d.ts +7 -0
- package/dist/services/metadata-validation.service.d.ts.map +1 -0
- package/dist/services/metadata-validation.service.js +42 -0
- package/dist/services/metadata-validation.service.js.map +1 -0
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +2 -1
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +2 -1
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/mpin.service.d.ts +67 -0
- package/dist/services/mpin.service.d.ts.map +1 -0
- package/dist/services/mpin.service.js +282 -0
- package/dist/services/mpin.service.js.map +1 -0
- package/dist/services/object.utils.d.ts +2 -0
- package/dist/services/object.utils.d.ts.map +1 -0
- package/dist/services/object.utils.js +11 -0
- package/dist/services/object.utils.js.map +1 -0
- package/dist/services/refresh-token-ids-storage.service.d.ts +25 -6
- package/dist/services/refresh-token-ids-storage.service.d.ts.map +1 -1
- package/dist/services/refresh-token-ids-storage.service.js +80 -42
- package/dist/services/refresh-token-ids-storage.service.js.map +1 -1
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +2 -1
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/settings/default-settings-provider.service.d.ts +228 -12
- package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
- package/dist/services/settings/default-settings-provider.service.js +129 -6
- package/dist/services/settings/default-settings-provider.service.js.map +1 -1
- package/dist/services/user.service.d.ts +2 -2
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +9 -3
- package/dist/services/user.service.js.map +1 -1
- package/dist/services/view-metadata.service.d.ts +1 -2
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +3 -55
- package/dist/services/view-metadata.service.js.map +1 -1
- package/dist/services/workflow/nodes/execution-fail.node.d.ts +6 -0
- package/dist/services/workflow/nodes/execution-fail.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/execution-fail.node.js +81 -0
- package/dist/services/workflow/nodes/execution-fail.node.js.map +1 -0
- package/dist/services/workflow/nodes/for-each.node.d.ts +2 -0
- package/dist/services/workflow/nodes/for-each.node.d.ts.map +1 -1
- package/dist/services/workflow/nodes/for-each.node.js +114 -5
- package/dist/services/workflow/nodes/for-each.node.js.map +1 -1
- package/dist/services/workflow/nodes/if.node.d.ts.map +1 -1
- package/dist/services/workflow/nodes/if.node.js +7 -0
- package/dist/services/workflow/nodes/if.node.js.map +1 -1
- package/dist/services/workflow/nodes/log-write.node.d.ts.map +1 -1
- package/dist/services/workflow/nodes/log-write.node.js +2 -0
- package/dist/services/workflow/nodes/log-write.node.js.map +1 -1
- package/dist/services/workflow/nodes/loop-until.node.d.ts +12 -0
- package/dist/services/workflow/nodes/loop-until.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/loop-until.node.js +281 -0
- package/dist/services/workflow/nodes/loop-until.node.js.map +1 -0
- package/dist/services/workflow/nodes/parallel.node.d.ts.map +1 -1
- package/dist/services/workflow/nodes/parallel.node.js +7 -0
- package/dist/services/workflow/nodes/parallel.node.js.map +1 -1
- package/dist/services/workflow/nodes/sequential.node.d.ts.map +1 -1
- package/dist/services/workflow/nodes/sequential.node.js +7 -0
- package/dist/services/workflow/nodes/sequential.node.js.map +1 -1
- package/dist/services/workflow/nodes/switch.node.d.ts.map +1 -1
- package/dist/services/workflow/nodes/switch.node.js +7 -0
- package/dist/services/workflow/nodes/switch.node.js.map +1 -1
- package/dist/services/workflow/workflow-definition-validator.service.d.ts.map +1 -1
- package/dist/services/workflow/workflow-definition-validator.service.js +5 -2
- package/dist/services/workflow/workflow-definition-validator.service.js.map +1 -1
- package/dist/services/workflow/workflow-expression.service.d.ts.map +1 -1
- package/dist/services/workflow/workflow-expression.service.js +5 -0
- package/dist/services/workflow/workflow-expression.service.js.map +1 -1
- package/dist/services/workflow/workflow-node-registry.service.d.ts +2 -1
- package/dist/services/workflow/workflow-node-registry.service.d.ts.map +1 -1
- package/dist/services/workflow/workflow-node-registry.service.js +7 -0
- package/dist/services/workflow/workflow-node-registry.service.js.map +1 -1
- package/dist/services/workflow/workflow-runtime.service.d.ts +8 -0
- package/dist/services/workflow/workflow-runtime.service.d.ts.map +1 -1
- package/dist/services/workflow/workflow-runtime.service.js +197 -32
- package/dist/services/workflow/workflow-runtime.service.js.map +1 -1
- package/dist/services/workflow-definition.service.d.ts +1 -1
- package/dist/solid-core.module.d.ts +1 -3
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +22 -40
- package/dist/solid-core.module.js.map +1 -1
- package/dist/testing/adapters/ui/playwright-adapter.d.ts +5 -0
- package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
- package/dist/testing/adapters/ui/playwright-adapter.js +17 -1
- package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
- package/dist/testing/adapters/ui/ui.types.d.ts +2 -0
- package/dist/testing/adapters/ui/ui.types.d.ts.map +1 -1
- package/dist/testing/adapters/ui/ui.types.js.map +1 -1
- package/dist/testing/reporter/console-reporter.d.ts +3 -0
- package/dist/testing/reporter/console-reporter.d.ts.map +1 -1
- package/dist/testing/reporter/console-reporter.js +2 -0
- package/dist/testing/reporter/console-reporter.js.map +1 -1
- package/dist/testing/reporter/progress-reporter.d.ts +64 -0
- package/dist/testing/reporter/progress-reporter.d.ts.map +1 -0
- package/dist/testing/reporter/progress-reporter.js +224 -0
- package/dist/testing/reporter/progress-reporter.js.map +1 -0
- package/dist/testing/reporter/reporter.types.d.ts +3 -0
- package/dist/testing/reporter/reporter.types.d.ts.map +1 -1
- package/dist/testing/reporter/reporter.types.js.map +1 -1
- package/dist/testing/runner/run-from-metadata.d.ts.map +1 -1
- package/dist/testing/runner/run-from-metadata.js +1 -0
- package/dist/testing/runner/run-from-metadata.js.map +1 -1
- package/dist/testing/steps/ui/actions.step.d.ts.map +1 -1
- package/dist/testing/steps/ui/actions.step.js +6 -2
- package/dist/testing/steps/ui/actions.step.js.map +1 -1
- package/dist/testing/steps/ui/assertions.step.d.ts.map +1 -1
- package/dist/testing/steps/ui/assertions.step.js +11 -3
- 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 +9 -3
- package/dist/testing/steps/ui/form.step.js.map +1 -1
- package/dist/testing/steps/ui/manual.step.js +1 -1
- package/dist/testing/steps/ui/manual.step.js.map +1 -1
- package/dist/testing/steps/ui/navigation.step.d.ts.map +1 -1
- package/dist/testing/steps/ui/navigation.step.js +3 -1
- package/dist/testing/steps/ui/navigation.step.js.map +1 -1
- package/dist/theme/theme-registry.d.ts +14 -0
- package/dist/theme/theme-registry.d.ts.map +1 -0
- package/dist/theme/theme-registry.js +147 -0
- package/dist/theme/theme-registry.js.map +1 -0
- package/dist/types/workflow-dsl.types.d.ts +14 -0
- package/dist/types/workflow-dsl.types.d.ts.map +1 -1
- package/dist/types/workflow-dsl.types.js.map +1 -1
- package/package.json +2 -2
- package/postman/mpin.postman_collection.json +1045 -0
- package/src/commands/run-tests.command.ts +64 -4
- package/src/commands/seed.command.ts +19 -0
- package/src/config/cache.options.ts +9 -1
- package/src/constants/chatter-message.constants.ts +12 -0
- package/src/constants/draft-publish-fields.ts +5 -0
- package/src/constants/error-messages.ts +14 -0
- package/src/constants/media-file-types.ts +127 -0
- package/src/constants/success-messages.ts +5 -0
- package/src/constants/user.constants.ts +13 -0
- package/src/controllers/authentication.controller.ts +5 -2
- package/src/controllers/chatter-message.controller.ts +8 -0
- package/src/controllers/export-template.controller.ts +5 -3
- package/src/controllers/import-transaction.controller.ts +6 -6
- package/src/controllers/media.controller.ts +17 -6
- package/src/controllers/module-package.controller.ts +2 -3
- package/src/controllers/mpin-authentication.controller.ts +67 -0
- package/src/dtos/basic-filters.dto.ts +0 -4
- package/src/dtos/change-mpin.dto.ts +18 -0
- package/src/dtos/create-field-metadata.dto.ts +4 -9
- package/src/dtos/create-model-sequence.dto.ts +1 -1
- package/src/dtos/mpin-login.dto.ts +24 -0
- package/src/dtos/setup-mpin.dto.ts +51 -0
- package/src/entities/common.entity.ts +24 -0
- package/src/entities/dashboard-user-layout.entity.ts +2 -2
- package/src/entities/saved-filters.entity.ts +3 -3
- package/src/entities/user-device-credential.entity.ts +130 -0
- package/src/entities/user.entity.ts +53 -36
- package/src/entities/view-metadata.entity.ts +2 -2
- package/src/entities/workflow-execution-artifact.entity.ts +4 -3
- package/src/entities/workflow-execution-log.entity.ts +4 -3
- package/src/entities/workflow-execution.entity.ts +3 -2
- package/src/entities/workflow-secret.entity.ts +3 -2
- package/src/entities/workflow-step-execution.entity.ts +3 -2
- package/src/entities/workflow-trigger-execution.entity.ts +7 -6
- package/src/factories/mail.factory.ts +7 -1
- package/src/filters/http-exception.filter.ts +11 -1
- package/src/helpers/bootstrap.helper.ts +43 -6
- package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +26 -12
- package/src/helpers/file-download.helper.ts +45 -0
- package/src/helpers/model-metadata-helper.service.ts +32 -1
- package/src/helpers/security.helper.ts +35 -8
- package/src/helpers/solid-core-error-codes-provider.service.ts +53 -0
- package/src/helpers/solid-microservice-adapter.service.ts +6 -1
- package/src/helpers/solid-registry.ts +1 -1
- package/src/helpers/typeorm-db-helper.ts +12 -1
- package/src/index.ts +10 -0
- package/src/interfaces/active-user-data.interface.ts +9 -0
- package/src/interfaces.ts +1 -0
- package/src/repository/user-device-credential.repository.ts +17 -0
- package/src/seeders/module-metadata-seeder.service.ts +61 -39
- package/src/seeders/module-test-data.service.ts +6 -0
- package/src/seeders/seed-data/solid-core-metadata.json +290 -78
- package/src/services/api-key.service.ts +13 -1
- package/src/services/authentication.service.ts +203 -41
- package/src/services/chatter-message.service.ts +124 -5
- package/src/services/crud-helper.service.ts +35 -50
- package/src/services/crud.service.ts +131 -105
- package/src/services/datasource-introspection.service.ts +5 -0
- package/src/services/draft-publish-helper.service.ts +581 -0
- package/src/services/field-metadata.service.ts +3 -2
- package/src/services/internationalisation-helper.service.ts +148 -0
- package/src/services/media-storage.utils.ts +26 -1
- package/src/services/media.service.ts +67 -36
- package/src/services/metadata-validation.service.ts +39 -0
- package/src/services/model-metadata.service.ts +4 -1
- package/src/services/module-metadata.service.ts +3 -1
- package/src/services/mpin.service.ts +447 -0
- package/src/services/object.utils.ts +10 -0
- package/src/services/refresh-token-ids-storage.service.ts +229 -90
- package/src/services/setting.service.ts +3 -1
- package/src/services/settings/default-settings-provider.service.ts +140 -6
- package/src/services/user.service.ts +18 -3
- package/src/services/view-metadata.service.ts +5 -145
- package/src/services/workflow/nodes/execution-fail.node.ts +82 -0
- package/src/services/workflow/nodes/for-each.node.ts +140 -6
- package/src/services/workflow/nodes/if.node.ts +7 -0
- package/src/services/workflow/nodes/log-write.node.ts +2 -0
- package/src/services/workflow/nodes/loop-until.node.ts +343 -0
- package/src/services/workflow/nodes/parallel.node.ts +7 -0
- package/src/services/workflow/nodes/sequential.node.ts +7 -0
- package/src/services/workflow/nodes/switch.node.ts +7 -0
- package/src/services/workflow/workflow-definition-validator.service.ts +5 -2
- package/src/services/workflow/workflow-expression.service.ts +5 -0
- package/src/services/workflow/workflow-node-registry.service.ts +11 -0
- package/src/services/workflow/workflow-runtime.service.ts +274 -39
- package/src/solid-core.module.ts +33 -15
- package/src/testing/README.md +75 -3
- package/src/testing/adapters/ui/playwright-adapter.ts +25 -0
- package/src/testing/adapters/ui/ui.types.ts +2 -0
- package/src/testing/reporter/console-reporter.ts +4 -0
- package/src/testing/reporter/progress-reporter.ts +251 -0
- package/src/testing/reporter/reporter.types.ts +3 -0
- package/src/testing/runner/run-from-metadata.ts +1 -0
- package/src/testing/steps/ui/actions.step.ts +8 -4
- package/src/testing/steps/ui/assertions.step.ts +18 -5
- package/src/testing/steps/ui/form.step.ts +16 -6
- package/src/testing/steps/ui/manual.step.ts +1 -1
- package/src/testing/steps/ui/navigation.step.ts +4 -2
- package/src/theme/theme-registry.ts +181 -0
- package/src/types/workflow-dsl.types.ts +43 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { IsNotEmpty, IsString, MaxLength } from 'class-validator';
|
|
2
|
+
|
|
3
|
+
export class ChangeMpinDto {
|
|
4
|
+
@IsNotEmpty()
|
|
5
|
+
@IsString()
|
|
6
|
+
@MaxLength(128)
|
|
7
|
+
credentialRef: string;
|
|
8
|
+
|
|
9
|
+
@IsNotEmpty()
|
|
10
|
+
@IsString()
|
|
11
|
+
@MaxLength(32)
|
|
12
|
+
currentMpin: string;
|
|
13
|
+
|
|
14
|
+
@IsNotEmpty()
|
|
15
|
+
@IsString()
|
|
16
|
+
@MaxLength(32)
|
|
17
|
+
newMpin: string;
|
|
18
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ApiProperty } from '@nestjs/swagger';
|
|
2
2
|
import { Transform, Type } from 'class-transformer';
|
|
3
|
+
import { MEDIA_CATEGORIES, MediaCategory } from '../constants/media-file-types';
|
|
3
4
|
|
|
4
5
|
import {
|
|
5
6
|
IsArray,
|
|
@@ -155,13 +156,7 @@ export enum DecryptWhenType {
|
|
|
155
156
|
afterTransit = 'after-transit',
|
|
156
157
|
}
|
|
157
158
|
|
|
158
|
-
export
|
|
159
|
-
image = 'image',
|
|
160
|
-
audio = 'audio',
|
|
161
|
-
video = 'video',
|
|
162
|
-
// document = 'document',
|
|
163
|
-
file = 'file',
|
|
164
|
-
}
|
|
159
|
+
export type MediaType = MediaCategory;
|
|
165
160
|
|
|
166
161
|
export enum RelationType {
|
|
167
162
|
manyToOne = 'many-to-one',
|
|
@@ -308,7 +303,7 @@ export class CreateFieldMetadataDto {
|
|
|
308
303
|
private: boolean;
|
|
309
304
|
|
|
310
305
|
@ApiProperty({ description: 'Allowed media types for the field. Only for type=mediaSingle,mediaMultiple', })
|
|
311
|
-
@
|
|
306
|
+
@IsIn([...MEDIA_CATEGORIES], { each: true })
|
|
312
307
|
@IsOptional()
|
|
313
308
|
mediaTypes: MediaType[];
|
|
314
309
|
|
|
@@ -464,4 +459,4 @@ export class CreateFieldMetadataDto {
|
|
|
464
459
|
@ApiProperty({ description: 'Is Primary Key Field', })
|
|
465
460
|
@IsBoolean()
|
|
466
461
|
isPrimaryKey?: boolean;
|
|
467
|
-
}
|
|
462
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { IsNotEmpty, IsString, MaxLength } from 'class-validator';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Deliberately carries no identifier - no mobile, email or username.
|
|
5
|
+
*
|
|
6
|
+
* `credentialRef` is a server-issued 256-bit handle that already points at a
|
|
7
|
+
* single credential row, and therefore at a single user. That is what removes
|
|
8
|
+
* the user-enumeration surface a public login route would otherwise have: an
|
|
9
|
+
* attacker cannot probe "does this phone number have MPIN?" because there is
|
|
10
|
+
* nowhere to put a phone number.
|
|
11
|
+
*/
|
|
12
|
+
export class MpinLoginDto {
|
|
13
|
+
// Bounded so a pathological payload never reaches the regex test or the
|
|
14
|
+
// hash comparison. The handle is always 64 hex characters.
|
|
15
|
+
@IsNotEmpty()
|
|
16
|
+
@IsString()
|
|
17
|
+
@MaxLength(128)
|
|
18
|
+
credentialRef: string;
|
|
19
|
+
|
|
20
|
+
@IsNotEmpty()
|
|
21
|
+
@IsString()
|
|
22
|
+
@MaxLength(32)
|
|
23
|
+
mpin: string;
|
|
24
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { IsNotEmpty, IsOptional, IsString, IsUUID, Matches, MaxLength } from 'class-validator';
|
|
2
|
+
|
|
3
|
+
export class SetupMpinDto {
|
|
4
|
+
/**
|
|
5
|
+
* Stable identifier for the physical device, generated once by the client.
|
|
6
|
+
* Validated as a UUID before it ever reaches a cache key or a bucket name,
|
|
7
|
+
* so it cannot smuggle delimiters into the keyspace.
|
|
8
|
+
*/
|
|
9
|
+
@IsUUID()
|
|
10
|
+
deviceId: string;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A string, not a number, even though it looks like digits.
|
|
14
|
+
*
|
|
15
|
+
* A numeric MPIN cannot carry a leading zero: JSON forbids leading zeros in
|
|
16
|
+
* number literals, so a client serialising `012345` numerically emits
|
|
17
|
+
* `12345` and the server stores a five-digit MPIN the user never chose -
|
|
18
|
+
* which still satisfies the default `^\d{4,6}$` and so raises no error.
|
|
19
|
+
* `mpinRegex` is also tenant-configurable and may permit non-digits.
|
|
20
|
+
*
|
|
21
|
+
* Note this cannot be enforced here: the global ValidationPipe runs with
|
|
22
|
+
* `enableImplicitConversion`, so a numeric payload is coerced to a string
|
|
23
|
+
* before @IsString() sees it. Clients must send a quoted JSON string; that
|
|
24
|
+
* requirement is documented in the mobile integration guide.
|
|
25
|
+
*
|
|
26
|
+
* Length and shape are checked server-side against `mpinRegex`, since that
|
|
27
|
+
* setting is the single authority. This only bounds the input.
|
|
28
|
+
*/
|
|
29
|
+
@IsNotEmpty()
|
|
30
|
+
@IsString()
|
|
31
|
+
@MaxLength(32)
|
|
32
|
+
mpin: string;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Rendered in a device-management list, so it is bounded here rather than
|
|
36
|
+
* trusting every consuming UI to escape it.
|
|
37
|
+
*/
|
|
38
|
+
@IsOptional()
|
|
39
|
+
@IsString()
|
|
40
|
+
@MaxLength(64)
|
|
41
|
+
@Matches(/^[\w\s.'()-]*$/, {
|
|
42
|
+
message: 'deviceName may contain only letters, numbers, spaces and . \' ( ) - _',
|
|
43
|
+
})
|
|
44
|
+
deviceName?: string;
|
|
45
|
+
|
|
46
|
+
@IsOptional()
|
|
47
|
+
@IsString()
|
|
48
|
+
@MaxLength(32)
|
|
49
|
+
@Matches(/^[\w.-]*$/, { message: 'platform may contain only letters, numbers and . - _' })
|
|
50
|
+
platform?: string;
|
|
51
|
+
}
|
|
@@ -25,6 +25,30 @@ export abstract class CommonEntity {
|
|
|
25
25
|
@Column({ name: 'published_at', default: null, nullable: true, transformer: LocalDateTimeTransformer })
|
|
26
26
|
publishedAt: Date;
|
|
27
27
|
|
|
28
|
+
// Optional (not just nullable) because legacy tables (see LegacyCommonEntityWithExistingId)
|
|
29
|
+
// don't carry these versioning columns at all. CRUDService<T extends CommonEntity> is
|
|
30
|
+
// otherwise used for both plain and legacy entities, so these must stay structurally
|
|
31
|
+
// satisfiable by a type that never declares them.
|
|
32
|
+
@Expose()
|
|
33
|
+
@Column({ name: 'is_published', default: false })
|
|
34
|
+
@Index()
|
|
35
|
+
isPublished?: boolean;
|
|
36
|
+
|
|
37
|
+
@Expose()
|
|
38
|
+
@Column({ name: 'is_latest', default: true })
|
|
39
|
+
@Index()
|
|
40
|
+
isLatest?: boolean;
|
|
41
|
+
|
|
42
|
+
@Expose()
|
|
43
|
+
@Column({ type: "int", name: 'initial_entity_version_id', default: null, nullable: true })
|
|
44
|
+
@Index()
|
|
45
|
+
initialEntityVersionId?: number;
|
|
46
|
+
|
|
47
|
+
@Expose()
|
|
48
|
+
@Column({ name: 'published_tracker', default: "na" })
|
|
49
|
+
@Index()
|
|
50
|
+
publishedTracker?: string;
|
|
51
|
+
|
|
28
52
|
@Expose()
|
|
29
53
|
@Column({ type: "varchar", name: 'locale_name', default: null })
|
|
30
54
|
localeName: string;
|
|
@@ -6,12 +6,12 @@ import { ModuleMetadata } from 'src/entities/module-metadata.entity'
|
|
|
6
6
|
@Entity('ss_dashboard_user_layout')
|
|
7
7
|
export class DashboardUserLayout extends CommonEntity {
|
|
8
8
|
@Index()
|
|
9
|
-
@ManyToOne(() => User, {
|
|
9
|
+
@ManyToOne(() => User, { nullable: false })
|
|
10
10
|
@JoinColumn()
|
|
11
11
|
user: User;
|
|
12
12
|
|
|
13
13
|
@Index()
|
|
14
|
-
@ManyToOne(() => ModuleMetadata, {
|
|
14
|
+
@ManyToOne(() => ModuleMetadata, { nullable: false })
|
|
15
15
|
@JoinColumn()
|
|
16
16
|
module: ModuleMetadata;
|
|
17
17
|
|
|
@@ -18,17 +18,17 @@ export class SavedFilters extends CommonEntity {
|
|
|
18
18
|
isPrivate: boolean = false;
|
|
19
19
|
|
|
20
20
|
@Index()
|
|
21
|
-
@ManyToOne(() => User, {
|
|
21
|
+
@ManyToOne(() => User, { nullable: true })
|
|
22
22
|
@JoinColumn()
|
|
23
23
|
user: User;
|
|
24
24
|
|
|
25
25
|
@Index()
|
|
26
|
-
@ManyToOne(() => ModelMetadata, {
|
|
26
|
+
@ManyToOne(() => ModelMetadata, { nullable: false })
|
|
27
27
|
@JoinColumn()
|
|
28
28
|
model: ModelMetadata;
|
|
29
29
|
|
|
30
30
|
@Index()
|
|
31
|
-
@ManyToOne(() => ViewMetadata, {
|
|
31
|
+
@ManyToOne(() => ViewMetadata, { nullable: false })
|
|
32
32
|
@JoinColumn()
|
|
33
33
|
view: ViewMetadata;
|
|
34
34
|
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { Exclude, Expose } from "class-transformer";
|
|
2
|
+
import { CommonEntity } from "src/entities/common.entity";
|
|
3
|
+
import { Column, Entity, Index, ManyToOne } from "typeorm";
|
|
4
|
+
import { User } from "./user.entity";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A per-device MPIN credential.
|
|
8
|
+
*
|
|
9
|
+
* Login presents `credentialRef` (a server-issued opaque handle) plus the MPIN.
|
|
10
|
+
* The handle - not a mobile number or email - is what identifies the account,
|
|
11
|
+
* which is why the login route needs no identifier and offers no user
|
|
12
|
+
* enumeration surface.
|
|
13
|
+
*/
|
|
14
|
+
@Entity("ss_user_device_credential")
|
|
15
|
+
// Non-unique: one physical device may legitimately hold credentials for
|
|
16
|
+
// several accounts, and each account setup mints its own row.
|
|
17
|
+
@Index(["user", "deviceId"])
|
|
18
|
+
@Exclude()
|
|
19
|
+
export class UserDeviceCredential extends CommonEntity {
|
|
20
|
+
|
|
21
|
+
// SHA-256 of the opaque handle, and the login lookup key. Never exposed:
|
|
22
|
+
// the raw handle is returned to the client once at setup and never stored.
|
|
23
|
+
// SHA-256 rather than bcrypt because the handle is 256 bits of randomness -
|
|
24
|
+
// there is nothing to brute-force, so a slow hash would only add latency.
|
|
25
|
+
// Same treatment as UserApiKey.hashedKey.
|
|
26
|
+
@Index({ unique: true })
|
|
27
|
+
@Column()
|
|
28
|
+
hashedCredentialRef: string;
|
|
29
|
+
|
|
30
|
+
// bcrypt hash of the MPIN, via HashingService. Never exposed - same
|
|
31
|
+
// treatment as User.password. Slow hashing is warranted here: a 4-6 digit
|
|
32
|
+
// secret is exactly the low-entropy case bcrypt exists for.
|
|
33
|
+
@Column()
|
|
34
|
+
hashedMpin: string;
|
|
35
|
+
|
|
36
|
+
// Mirrors User.passwordScheme / passwordSchemeVersion so
|
|
37
|
+
// HashingService.needsRehash can upgrade the hash on a successful login.
|
|
38
|
+
@Column()
|
|
39
|
+
mpinScheme: string;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The hashing *policy* version this row was hashed under - not a version of
|
|
43
|
+
* MPIN itself. It comes from `HashingService.currentVersion()`, which
|
|
44
|
+
* `BcryptService` currently returns as **2**, so freshly created rows read
|
|
45
|
+
* 2, exactly as `ss_user.password_scheme_version` does.
|
|
46
|
+
*
|
|
47
|
+
* It matters because `BcryptService.normalize` applies the configured
|
|
48
|
+
* pepper only when `version >= 2`. Storing the version per row means an
|
|
49
|
+
* older hash still verifies after the policy changes: `compare()` uses the
|
|
50
|
+
* version the row was written with, and `needsRehash()` upgrades it on the
|
|
51
|
+
* next successful login.
|
|
52
|
+
*
|
|
53
|
+
* The `default: 1` is inherited from the `User` precedent and is never
|
|
54
|
+
* reached, since every write path sets this explicitly. Note it would be
|
|
55
|
+
* *wrong* if it ever were: a row hashed at 2 but recorded as 1 would be
|
|
56
|
+
* compared without the pepper and could never authenticate.
|
|
57
|
+
*/
|
|
58
|
+
@Column({ default: 1 })
|
|
59
|
+
mpinSchemeVersion: number;
|
|
60
|
+
|
|
61
|
+
// Client-supplied, stable for the physical device. Used for grouping and
|
|
62
|
+
// the device-management UI only - never a lookup key. Deliberately NOT
|
|
63
|
+
// unique: several accounts on one device share a deviceId.
|
|
64
|
+
@Expose()
|
|
65
|
+
@Column()
|
|
66
|
+
deviceId: string;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Human-readable natural key - `<username>-<deviceId>` - unique per row.
|
|
70
|
+
*
|
|
71
|
+
* Neither column alone can serve as the model's user key: `deviceId` is
|
|
72
|
+
* shared by every account on a device, and `deviceName` is nullable.
|
|
73
|
+
* Combining them is unique in both directions - one user across many
|
|
74
|
+
* devices, and many users on one device.
|
|
75
|
+
*
|
|
76
|
+
* Populated by MpinService rather than declared as a `computed` field in
|
|
77
|
+
* the metadata manifest. Computed fields are evaluated by
|
|
78
|
+
* ComputedFieldCrudManager on the generic CRUD path (`crud.service.ts`),
|
|
79
|
+
* which this service bypasses by writing through the repository directly,
|
|
80
|
+
* so a computed declaration would silently leave this null. It is also
|
|
81
|
+
* beyond ConcatComputedFieldProvider, which resolves `dto[field]` flatly
|
|
82
|
+
* within one model and cannot reach `username` across the user relation.
|
|
83
|
+
*/
|
|
84
|
+
@Expose()
|
|
85
|
+
@Index({ unique: true })
|
|
86
|
+
@Column()
|
|
87
|
+
credentialKey: string;
|
|
88
|
+
|
|
89
|
+
@Expose()
|
|
90
|
+
@Column({ nullable: true })
|
|
91
|
+
deviceName: string;
|
|
92
|
+
|
|
93
|
+
@Expose()
|
|
94
|
+
@Column({ nullable: true })
|
|
95
|
+
platform: string;
|
|
96
|
+
|
|
97
|
+
// Revocation is a soft-delete: the row survives so that a correct MPIN can
|
|
98
|
+
// be answered with "this device was removed" rather than a baffling
|
|
99
|
+
// "incorrect MPIN". Only active rows count towards mpinMaxDevicesPerUser.
|
|
100
|
+
@Expose()
|
|
101
|
+
@Column({ default: true })
|
|
102
|
+
isActive: boolean;
|
|
103
|
+
|
|
104
|
+
// Cumulative, and reset only on a successful login - never when a lockout
|
|
105
|
+
// expires. That is what makes the second threshold detectable without a
|
|
106
|
+
// separate lockout counter.
|
|
107
|
+
@Expose()
|
|
108
|
+
@Column({ default: 0 })
|
|
109
|
+
failedAttempts: number;
|
|
110
|
+
|
|
111
|
+
@Expose()
|
|
112
|
+
@Column({ nullable: true })
|
|
113
|
+
lockedUntil: Date;
|
|
114
|
+
|
|
115
|
+
@Expose()
|
|
116
|
+
@Column({ nullable: true })
|
|
117
|
+
lastUsedAt: Date;
|
|
118
|
+
|
|
119
|
+
// Deliberately no inverse property on User. Nothing needs
|
|
120
|
+
// `user.deviceCredentials`, and leaving the most widely referenced entity
|
|
121
|
+
// in the system untouched keeps this feature purely additive.
|
|
122
|
+
//
|
|
123
|
+
// `nullable: false` because TypeORM makes relations nullable by default,
|
|
124
|
+
// which would let a credential exist with no owner. Such a row could never
|
|
125
|
+
// authenticate - loginWithMpin rejects it - so it would simply be dead
|
|
126
|
+
// data, but the database should refuse it outright. This also keeps the
|
|
127
|
+
// column honest against the metadata manifest, which declares it required.
|
|
128
|
+
@ManyToOne(() => User, { nullable: false })
|
|
129
|
+
user: User;
|
|
130
|
+
}
|
|
@@ -5,6 +5,23 @@ import { UserViewMetadata } from 'src/entities/user-view-metadata.entity'
|
|
|
5
5
|
import { UserApiKey } from 'src/entities/user-api-key.entity'
|
|
6
6
|
import { Exclude, Expose } from "class-transformer";
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Serialization is locked down twice over, and both halves are load-bearing:
|
|
10
|
+
*
|
|
11
|
+
* - The class-level `@Exclude()` below makes User itself an allowlist: only `@Expose()`d
|
|
12
|
+
* properties are serialized.
|
|
13
|
+
* - Every other property additionally carries its own `@Exclude()`. That looks redundant
|
|
14
|
+
* here, and for `User` it is - but class-transformer resolves the *class-level* strategy
|
|
15
|
+
* with a direct lookup on the exact constructor (MetadataStorage.getStrategy), so a
|
|
16
|
+
* subclass inherits nothing and falls back to `exposeAll`. Since this entity is a
|
|
17
|
+
* `@TableInheritance` root that consuming projects extend (see
|
|
18
|
+
* IExtensionUserCreationProvider), an extension user that forgets its own `@Exclude()`
|
|
19
|
+
* would otherwise serialize the password hash and every OAuth/verification token.
|
|
20
|
+
* Property-level metadata *is* walked up the prototype chain, so the per-property
|
|
21
|
+
* decorators are what actually protect subclasses.
|
|
22
|
+
*
|
|
23
|
+
* Keep both. Adding a new column? Give it `@Expose()` or `@Exclude()` - never neither.
|
|
24
|
+
*/
|
|
8
25
|
@Entity("ss_user")
|
|
9
26
|
@TableInheritance({ column: { type: "varchar", name: "type", default: "User" } })
|
|
10
27
|
@Exclude()
|
|
@@ -30,7 +47,7 @@ export class User extends CommonEntity {
|
|
|
30
47
|
mobile: string;
|
|
31
48
|
|
|
32
49
|
@Column({ type: "varchar", nullable: true })
|
|
33
|
-
|
|
50
|
+
@Exclude()
|
|
34
51
|
password: string;
|
|
35
52
|
|
|
36
53
|
@Column({ nullable: true, default: true })
|
|
@@ -38,67 +55,67 @@ export class User extends CommonEntity {
|
|
|
38
55
|
forcePasswordChange: boolean = true;
|
|
39
56
|
|
|
40
57
|
@Column({ type: "varchar", default: "local" })
|
|
41
|
-
|
|
58
|
+
@Exclude()
|
|
42
59
|
lastLoginProvider: string = "local";
|
|
43
60
|
|
|
44
61
|
@Column({ type: "varchar", nullable: true })
|
|
45
|
-
|
|
62
|
+
@Exclude()
|
|
46
63
|
accessCode: string;
|
|
47
64
|
|
|
48
65
|
@Column({ type: "varchar", nullable: true })
|
|
49
|
-
|
|
66
|
+
@Exclude()
|
|
50
67
|
googleAccessToken: string;
|
|
51
68
|
|
|
52
69
|
@Column({ type: "varchar", nullable: true })
|
|
53
|
-
|
|
70
|
+
@Exclude()
|
|
54
71
|
googleId: string;
|
|
55
72
|
|
|
56
73
|
@Column({ type: "varchar", nullable: true })
|
|
57
|
-
|
|
74
|
+
@Exclude()
|
|
58
75
|
googleProfilePicture: string;
|
|
59
76
|
|
|
60
77
|
@Column({ type: "varchar", nullable: true })
|
|
61
|
-
|
|
78
|
+
@Exclude()
|
|
62
79
|
facebookId: string;
|
|
63
80
|
|
|
64
81
|
@Column({ type: "varchar", nullable: true })
|
|
65
|
-
|
|
82
|
+
@Exclude()
|
|
66
83
|
facebookAccessToken: string;
|
|
67
84
|
|
|
68
85
|
@Column({ type: "varchar", nullable: true })
|
|
69
|
-
|
|
86
|
+
@Exclude()
|
|
70
87
|
facebookProfilePicture: string;
|
|
71
88
|
|
|
72
89
|
@Column({ type: "varchar", nullable: true })
|
|
73
|
-
|
|
90
|
+
@Exclude()
|
|
74
91
|
appleId: string;
|
|
75
92
|
|
|
76
93
|
@Column({ type: "varchar", nullable: true })
|
|
77
|
-
|
|
94
|
+
@Exclude()
|
|
78
95
|
appleAccessToken: string;
|
|
79
96
|
|
|
80
97
|
@Column({ type: "varchar", nullable: true })
|
|
81
|
-
|
|
98
|
+
@Exclude()
|
|
82
99
|
microsoftId: string;
|
|
83
100
|
|
|
84
101
|
@Column({ type: "varchar", nullable: true })
|
|
85
|
-
|
|
102
|
+
@Exclude()
|
|
86
103
|
microsoftAccessToken: string;
|
|
87
104
|
|
|
88
105
|
@Column({ type: "varchar", nullable: true })
|
|
89
|
-
|
|
106
|
+
@Exclude()
|
|
90
107
|
microsoftProfilePicture: string;
|
|
91
108
|
|
|
92
109
|
@Column({ type: "varchar", nullable: true })
|
|
93
|
-
|
|
110
|
+
@Exclude()
|
|
94
111
|
microsoftActiveDirectoryId: string;
|
|
95
112
|
|
|
96
113
|
@Column({ type: "varchar", nullable: true })
|
|
97
|
-
|
|
114
|
+
@Exclude()
|
|
98
115
|
microsoftActiveDirectoryAccessToken: string;
|
|
99
116
|
|
|
100
117
|
@Column({ type: "varchar", nullable: true })
|
|
101
|
-
|
|
118
|
+
@Exclude()
|
|
102
119
|
microsoftActiveDirectoryProfilePicture: string;
|
|
103
120
|
|
|
104
121
|
@Index()
|
|
@@ -107,63 +124,63 @@ export class User extends CommonEntity {
|
|
|
107
124
|
active: boolean = true;
|
|
108
125
|
|
|
109
126
|
@Column({ nullable: true })
|
|
110
|
-
|
|
127
|
+
@Exclude()
|
|
111
128
|
forgotPasswordConfirmedAt: Date;
|
|
112
129
|
|
|
113
130
|
@Column({ type: "varchar", nullable: true })
|
|
114
|
-
|
|
131
|
+
@Exclude()
|
|
115
132
|
verificationTokenOnForgotPassword: string;
|
|
116
133
|
|
|
117
134
|
@Column({ nullable: true })
|
|
118
|
-
|
|
135
|
+
@Exclude()
|
|
119
136
|
verificationTokenOnForgotPasswordExpiresAt: Date;
|
|
120
137
|
|
|
121
138
|
@Column({ nullable: true })
|
|
122
|
-
|
|
139
|
+
@Exclude()
|
|
123
140
|
emailVerifiedOnRegistrationAt: Date;
|
|
124
141
|
|
|
125
142
|
@Column({ type: "varchar", nullable: true })
|
|
126
|
-
|
|
143
|
+
@Exclude()
|
|
127
144
|
emailVerificationTokenOnRegistration: string;
|
|
128
145
|
|
|
129
146
|
@Column({ nullable: true })
|
|
130
|
-
|
|
147
|
+
@Exclude()
|
|
131
148
|
emailVerificationTokenOnRegistrationExpiresAt: Date;
|
|
132
149
|
|
|
133
150
|
@Column({ nullable: true })
|
|
134
|
-
|
|
151
|
+
@Exclude()
|
|
135
152
|
mobileVerifiedOnRegistrationAt: Date;
|
|
136
153
|
|
|
137
154
|
@Column({ type: "varchar", nullable: true })
|
|
138
|
-
|
|
155
|
+
@Exclude()
|
|
139
156
|
mobileVerificationTokenOnRegistration: string;
|
|
140
157
|
|
|
141
158
|
@Column({ nullable: true })
|
|
142
|
-
|
|
159
|
+
@Exclude()
|
|
143
160
|
mobileVerificationTokenOnRegistrationExpiresAt: Date;
|
|
144
161
|
|
|
145
162
|
@Column({ nullable: true })
|
|
146
|
-
|
|
163
|
+
@Exclude()
|
|
147
164
|
emailVerifiedOnLoginAt: Date;
|
|
148
165
|
|
|
149
166
|
@Column({ type: "varchar", nullable: true })
|
|
150
|
-
|
|
167
|
+
@Exclude()
|
|
151
168
|
emailVerificationTokenOnLogin: string;
|
|
152
169
|
|
|
153
170
|
@Column({ nullable: true })
|
|
154
|
-
|
|
171
|
+
@Exclude()
|
|
155
172
|
emailVerificationTokenOnLoginExpiresAt: Date;
|
|
156
173
|
|
|
157
174
|
@Column({ nullable: true })
|
|
158
|
-
|
|
175
|
+
@Exclude()
|
|
159
176
|
mobileVerifiedOnLoginAt: Date;
|
|
160
177
|
|
|
161
178
|
@Column({ type: "varchar", nullable: true })
|
|
162
|
-
|
|
179
|
+
@Exclude()
|
|
163
180
|
mobileVerificationTokenOnLogin: string;
|
|
164
181
|
|
|
165
182
|
@Column({ nullable: true })
|
|
166
|
-
|
|
183
|
+
@Exclude()
|
|
167
184
|
mobileVerificationTokenOnLoginExpiresAt: Date;
|
|
168
185
|
|
|
169
186
|
@Column({ type: "varchar", nullable: true })
|
|
@@ -176,18 +193,18 @@ export class User extends CommonEntity {
|
|
|
176
193
|
roles: RoleMetadata[];
|
|
177
194
|
|
|
178
195
|
@OneToMany(() => UserViewMetadata, userViewMetadata => userViewMetadata.user, { cascade: true })
|
|
179
|
-
|
|
196
|
+
@Exclude()
|
|
180
197
|
userViewMetadata: UserViewMetadata[];
|
|
181
198
|
|
|
182
|
-
|
|
199
|
+
@Exclude()
|
|
183
200
|
@Column({ type: "varchar", default: "bcrypt" })
|
|
184
201
|
passwordScheme: string;
|
|
185
202
|
|
|
186
|
-
|
|
203
|
+
@Exclude()
|
|
187
204
|
@Column({ type: "int", default: 1 })
|
|
188
205
|
passwordSchemeVersion: number;
|
|
189
206
|
|
|
190
|
-
|
|
207
|
+
@Exclude()
|
|
191
208
|
@Column({ nullable: true })
|
|
192
209
|
rehashedAt: Date;
|
|
193
210
|
|
|
@@ -19,11 +19,11 @@ export class ViewMetadata extends CommonEntity {
|
|
|
19
19
|
@Column({ name: "type", type: "varchar" })
|
|
20
20
|
type: string;
|
|
21
21
|
|
|
22
|
-
//TODO: To make this truly cross db compatible, we should avoid setting a db type
|
|
22
|
+
// TODO: To make this truly cross db compatible, we should avoid setting a db type
|
|
23
23
|
@Column({ name: "context", type: "text" })
|
|
24
24
|
context: any = "{}";
|
|
25
25
|
|
|
26
|
-
//TODO: To make this truly cross db compatible, we should avoid setting a db type
|
|
26
|
+
// TODO: To make this truly cross db compatible, we should avoid setting a db type
|
|
27
27
|
@Column({ name: "layout", type: "text" })
|
|
28
28
|
layout: any;
|
|
29
29
|
|
|
@@ -2,6 +2,7 @@ import { CommonEntity } from 'src/entities/common.entity';
|
|
|
2
2
|
import { Entity, Column, Index, JoinColumn, ManyToOne } from 'typeorm';
|
|
3
3
|
import { WorkflowExecution } from './workflow-execution.entity';
|
|
4
4
|
import { WorkflowStepExecution } from './workflow-step-execution.entity'
|
|
5
|
+
import { getColumnType } from 'src/helpers/typeorm-db-helper';
|
|
5
6
|
|
|
6
7
|
@Entity('ss_workflow_execution_artifact')
|
|
7
8
|
export class WorkflowExecutionArtifact extends CommonEntity {
|
|
@@ -10,12 +11,12 @@ export class WorkflowExecutionArtifact extends CommonEntity {
|
|
|
10
11
|
artifactKey: string;
|
|
11
12
|
|
|
12
13
|
@Index()
|
|
13
|
-
@ManyToOne(() => WorkflowExecution, {
|
|
14
|
+
@ManyToOne(() => WorkflowExecution, { nullable: false })
|
|
14
15
|
@JoinColumn()
|
|
15
16
|
workflowExecution: WorkflowExecution;
|
|
16
17
|
|
|
17
18
|
@Index()
|
|
18
|
-
@ManyToOne(() => WorkflowStepExecution, {
|
|
19
|
+
@ManyToOne(() => WorkflowStepExecution, { nullable: true })
|
|
19
20
|
@JoinColumn()
|
|
20
21
|
workflowStepExecution: WorkflowStepExecution;
|
|
21
22
|
|
|
@@ -61,7 +62,7 @@ export class WorkflowExecutionArtifact extends CommonEntity {
|
|
|
61
62
|
checksum: string;
|
|
62
63
|
|
|
63
64
|
@Index()
|
|
64
|
-
@Column({
|
|
65
|
+
@Column({ nullable: true, ...getColumnType('datetime') })
|
|
65
66
|
producedAt: Date;
|
|
66
67
|
|
|
67
68
|
@Column({ type: "simple-json", nullable: true })
|
|
@@ -2,6 +2,7 @@ import { CommonEntity } from 'src/entities/common.entity';
|
|
|
2
2
|
import { Entity, Column, Index, JoinColumn, ManyToOne } from 'typeorm';
|
|
3
3
|
import { WorkflowExecution } from './workflow-execution.entity';
|
|
4
4
|
import { WorkflowStepExecution } from './workflow-step-execution.entity'
|
|
5
|
+
import { getColumnType } from 'src/helpers/typeorm-db-helper';
|
|
5
6
|
|
|
6
7
|
@Entity('ss_workflow_execution_log')
|
|
7
8
|
export class WorkflowExecutionLog extends CommonEntity {
|
|
@@ -10,12 +11,12 @@ export class WorkflowExecutionLog extends CommonEntity {
|
|
|
10
11
|
logKey: string;
|
|
11
12
|
|
|
12
13
|
@Index()
|
|
13
|
-
@ManyToOne(() => WorkflowExecution, {
|
|
14
|
+
@ManyToOne(() => WorkflowExecution, { nullable: false })
|
|
14
15
|
@JoinColumn()
|
|
15
16
|
workflowExecution: WorkflowExecution;
|
|
16
17
|
|
|
17
18
|
@Index()
|
|
18
|
-
@ManyToOne(() => WorkflowStepExecution, {
|
|
19
|
+
@ManyToOne(() => WorkflowStepExecution, { nullable: true })
|
|
19
20
|
@JoinColumn()
|
|
20
21
|
workflowStepExecution: WorkflowStepExecution;
|
|
21
22
|
|
|
@@ -47,7 +48,7 @@ export class WorkflowExecutionLog extends CommonEntity {
|
|
|
47
48
|
sequenceNumber: number;
|
|
48
49
|
|
|
49
50
|
@Index()
|
|
50
|
-
@Column({
|
|
51
|
+
@Column({ ...getColumnType('datetime') })
|
|
51
52
|
occurredAt: Date;
|
|
52
53
|
|
|
53
54
|
@Column({ type: "simple-json", nullable: true })
|
|
@@ -4,6 +4,7 @@ import { WorkflowDefinition } from './workflow-definition.entity'
|
|
|
4
4
|
import { WorkflowStepExecution } from './workflow-step-execution.entity';
|
|
5
5
|
import { WorkflowExecutionLog } from './workflow-execution-log.entity';
|
|
6
6
|
import { WorkflowExecutionArtifact } from './workflow-execution-artifact.entity';
|
|
7
|
+
import { getColumnType } from 'src/helpers/typeorm-db-helper';
|
|
7
8
|
|
|
8
9
|
@Entity('ss_workflow_execution')
|
|
9
10
|
export class WorkflowExecution extends CommonEntity {
|
|
@@ -32,11 +33,11 @@ export class WorkflowExecution extends CommonEntity {
|
|
|
32
33
|
triggerType: string = "manual";
|
|
33
34
|
|
|
34
35
|
@Index()
|
|
35
|
-
@Column({
|
|
36
|
+
@Column({ nullable: true, ...getColumnType('datetime') })
|
|
36
37
|
startedAt: Date;
|
|
37
38
|
|
|
38
39
|
@Index()
|
|
39
|
-
@Column({
|
|
40
|
+
@Column({ nullable: true, ...getColumnType('datetime') })
|
|
40
41
|
finishedAt: Date;
|
|
41
42
|
|
|
42
43
|
@Column({ type: "bigint", nullable: true })
|