@solidxai/core 0.1.13-beta.2 → 0.1.13-beta.21
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 +10107 -0
- package/CLAUDE.md +5 -6
- 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 +66 -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 +3 -6
- package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-field-metadata.dto.js +15 -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/field-metadata.entity.d.ts +1 -0
- package/dist/entities/field-metadata.entity.d.ts.map +1 -1
- package/dist/entities/field-metadata.entity.js +5 -1
- package/dist/entities/field-metadata.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 +7 -0
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +66 -32
- 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 +16 -1
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +100 -16
- 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 +94 -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 +4 -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 +45 -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 +9 -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 +6 -1
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/settings/default-settings-provider.service.d.ts +248 -12
- package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
- package/dist/services/settings/default-settings-provider.service.js +143 -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 +28 -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/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 +128 -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 +17 -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/field-metadata.entity.ts +3 -0
- 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 +90 -37
- 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 +180 -19
- package/src/services/crud-helper.service.ts +35 -50
- package/src/services/crud.service.ts +132 -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 +5 -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 +68 -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 +10 -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 +8 -1
- package/src/services/settings/default-settings-provider.service.ts +154 -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 +46 -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
|
@@ -161,7 +161,11 @@ export class WorkflowRuntimeService {
|
|
|
161
161
|
const execution = existingExecution
|
|
162
162
|
? await this.writer.startExecution(existingExecution, effectiveRequest)
|
|
163
163
|
: await this.writer.createExecution(definition, effectiveRequest);
|
|
164
|
-
const nodeCount = this.countNodes(
|
|
164
|
+
const nodeCount = this.countNodes([
|
|
165
|
+
...(definitionDsl.nodes ?? []),
|
|
166
|
+
...(definitionDsl.errors ?? []),
|
|
167
|
+
...(definitionDsl.finally ?? []),
|
|
168
|
+
]);
|
|
165
169
|
const outputs: Record<string, any> = {};
|
|
166
170
|
const runtimeContext: WorkflowRuntimeContext = {
|
|
167
171
|
execution,
|
|
@@ -175,26 +179,52 @@ export class WorkflowRuntimeService {
|
|
|
175
179
|
},
|
|
176
180
|
};
|
|
177
181
|
|
|
182
|
+
this.logger.log(
|
|
183
|
+
`Starting workflow execution ${execution.executionIdentifier} for ${definition.key} with ${nodeCount} node(s).`,
|
|
184
|
+
);
|
|
185
|
+
await this.writer.writeLog(execution, undefined, {
|
|
186
|
+
level: 'info',
|
|
187
|
+
eventType: 'execution.started',
|
|
188
|
+
message: `Workflow execution started for ${definition.key}.`,
|
|
189
|
+
metadata: {
|
|
190
|
+
executionIdentifier: execution.executionIdentifier,
|
|
191
|
+
workflowKey: definition.key,
|
|
192
|
+
triggerType: execution.triggerType,
|
|
193
|
+
nodeCount,
|
|
194
|
+
inputKeys: Object.keys(runtimeContext.input ?? {}),
|
|
195
|
+
variableKeys: Object.keys(runtimeContext.variables ?? {}),
|
|
196
|
+
},
|
|
197
|
+
}, this.nextLogSequence(runtimeContext));
|
|
198
|
+
|
|
199
|
+
let executionError: unknown;
|
|
200
|
+
|
|
178
201
|
try {
|
|
179
|
-
this.
|
|
180
|
-
|
|
181
|
-
|
|
202
|
+
await this.runNodes(definitionDsl.nodes, runtimeContext);
|
|
203
|
+
} catch (error) {
|
|
204
|
+
executionError = error;
|
|
205
|
+
await this.runGlobalErrorHandlers(definitionDsl, runtimeContext, error);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
try {
|
|
209
|
+
await this.runFinallyHandlers(definitionDsl, runtimeContext);
|
|
210
|
+
} catch (finallyError) {
|
|
182
211
|
await this.writer.writeLog(execution, undefined, {
|
|
183
|
-
level: '
|
|
184
|
-
eventType: '
|
|
185
|
-
message: `
|
|
212
|
+
level: 'error',
|
|
213
|
+
eventType: 'finally.failed',
|
|
214
|
+
message: `Finally handler failed: ${this.errorMessage(finallyError)}.`,
|
|
215
|
+
context: this.summarizeError(finallyError),
|
|
186
216
|
metadata: {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
nodeCount,
|
|
191
|
-
inputKeys: Object.keys(runtimeContext.input ?? {}),
|
|
192
|
-
variableKeys: Object.keys(runtimeContext.variables ?? {}),
|
|
217
|
+
originalError: executionError
|
|
218
|
+
? this.summarizeError(executionError)
|
|
219
|
+
: undefined,
|
|
193
220
|
},
|
|
194
221
|
}, this.nextLogSequence(runtimeContext));
|
|
222
|
+
if (!executionError) {
|
|
223
|
+
executionError = finallyError;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
195
226
|
|
|
196
|
-
|
|
197
|
-
|
|
227
|
+
if (!executionError) {
|
|
198
228
|
const completed = await this.writer.completeExecution(execution, outputs);
|
|
199
229
|
|
|
200
230
|
this.logger.log(
|
|
@@ -212,26 +242,26 @@ export class WorkflowRuntimeService {
|
|
|
212
242
|
}, this.nextLogSequence(runtimeContext));
|
|
213
243
|
|
|
214
244
|
return this.toResponse(completed);
|
|
215
|
-
}
|
|
216
|
-
const failed = await this.writer.failExecution(execution, error);
|
|
245
|
+
}
|
|
217
246
|
|
|
218
|
-
|
|
219
|
-
`Failed workflow execution ${failed.executionIdentifier} for ${definition.key}: ${failed.errorSummary}`,
|
|
220
|
-
error instanceof Error ? error.stack : undefined,
|
|
221
|
-
);
|
|
222
|
-
await this.writer.writeLog(failed, undefined, {
|
|
223
|
-
level: 'error',
|
|
224
|
-
eventType: 'execution.failed',
|
|
225
|
-
message: failed.errorSummary,
|
|
226
|
-
context: this.summarizeError(error),
|
|
227
|
-
metadata: {
|
|
228
|
-
executionIdentifier: failed.executionIdentifier,
|
|
229
|
-
durationMs: failed.durationMs,
|
|
230
|
-
},
|
|
231
|
-
}, this.nextLogSequence(runtimeContext));
|
|
247
|
+
const failed = await this.writer.failExecution(execution, executionError);
|
|
232
248
|
|
|
233
|
-
|
|
234
|
-
|
|
249
|
+
this.logger.error(
|
|
250
|
+
`Failed workflow execution ${failed.executionIdentifier} for ${definition.key}: ${failed.errorSummary}`,
|
|
251
|
+
executionError instanceof Error ? executionError.stack : undefined,
|
|
252
|
+
);
|
|
253
|
+
await this.writer.writeLog(failed, undefined, {
|
|
254
|
+
level: 'error',
|
|
255
|
+
eventType: 'execution.failed',
|
|
256
|
+
message: failed.errorSummary,
|
|
257
|
+
context: this.summarizeError(executionError),
|
|
258
|
+
metadata: {
|
|
259
|
+
executionIdentifier: failed.executionIdentifier,
|
|
260
|
+
durationMs: failed.durationMs,
|
|
261
|
+
},
|
|
262
|
+
}, this.nextLogSequence(runtimeContext));
|
|
263
|
+
|
|
264
|
+
return this.toResponse(failed);
|
|
235
265
|
}
|
|
236
266
|
|
|
237
267
|
async getExecutionStatus(executionId: number): Promise<WorkflowExecutionResponse> {
|
|
@@ -363,17 +393,19 @@ export class WorkflowRuntimeService {
|
|
|
363
393
|
nodes: WorkflowNodeDefinition[],
|
|
364
394
|
context: WorkflowRuntimeContext,
|
|
365
395
|
): Promise<Record<string, any>> {
|
|
396
|
+
const nodeOutputs: Record<string, any> = {};
|
|
397
|
+
|
|
366
398
|
for (const node of nodes ?? []) {
|
|
367
|
-
await this.runNode(node, context);
|
|
399
|
+
nodeOutputs[node.id] = await this.runNode(node, context);
|
|
368
400
|
}
|
|
369
401
|
|
|
370
|
-
return
|
|
402
|
+
return nodeOutputs;
|
|
371
403
|
}
|
|
372
404
|
|
|
373
405
|
private async runNode(
|
|
374
406
|
node: WorkflowNodeDefinition,
|
|
375
407
|
context: WorkflowRuntimeContext,
|
|
376
|
-
): Promise<
|
|
408
|
+
): Promise<Record<string, any>> {
|
|
377
409
|
const inputPayload = {
|
|
378
410
|
configuration: node.configuration,
|
|
379
411
|
input: context.input,
|
|
@@ -400,7 +432,7 @@ export class WorkflowRuntimeService {
|
|
|
400
432
|
message: `Skipped disabled node ${node.id}.`,
|
|
401
433
|
metadata: this.nodeLogMetadata(node, context, step),
|
|
402
434
|
}, this.nextLogSequence(context));
|
|
403
|
-
return;
|
|
435
|
+
return context.outputs[node.id];
|
|
404
436
|
}
|
|
405
437
|
|
|
406
438
|
try {
|
|
@@ -444,7 +476,7 @@ export class WorkflowRuntimeService {
|
|
|
444
476
|
});
|
|
445
477
|
|
|
446
478
|
const output = result.output ?? {};
|
|
447
|
-
context.outputs[node.id] = output;
|
|
479
|
+
context.outputs[node.id] = this.getRuntimeContextOutput(node, output);
|
|
448
480
|
|
|
449
481
|
for (const artifact of result.artifacts ?? []) {
|
|
450
482
|
await this.writer.writeArtifact(context.execution, step, artifact);
|
|
@@ -472,6 +504,8 @@ export class WorkflowRuntimeService {
|
|
|
472
504
|
artifactCount: result.artifacts?.length ?? 0,
|
|
473
505
|
},
|
|
474
506
|
}, this.nextLogSequence(context));
|
|
507
|
+
|
|
508
|
+
return output;
|
|
475
509
|
} catch (error) {
|
|
476
510
|
await this.writer.failStep(step, error);
|
|
477
511
|
|
|
@@ -486,7 +520,7 @@ export class WorkflowRuntimeService {
|
|
|
486
520
|
context: this.summarizeError(error),
|
|
487
521
|
metadata: this.nodeLogMetadata(node, context, step),
|
|
488
522
|
}, this.nextLogSequence(context));
|
|
489
|
-
return;
|
|
523
|
+
return context.outputs[node.id];
|
|
490
524
|
}
|
|
491
525
|
|
|
492
526
|
await this.writer.writeLog(context.execution, step, {
|
|
@@ -496,10 +530,158 @@ export class WorkflowRuntimeService {
|
|
|
496
530
|
context: this.summarizeError(error),
|
|
497
531
|
metadata: this.nodeLogMetadata(node, context, step),
|
|
498
532
|
}, this.nextLogSequence(context));
|
|
533
|
+
await this.runLocalErrorHandlers(node, context, error);
|
|
499
534
|
throw error;
|
|
500
535
|
}
|
|
501
536
|
}
|
|
502
537
|
|
|
538
|
+
private async runGlobalErrorHandlers(
|
|
539
|
+
definitionDsl: WorkflowDefinitionDsl,
|
|
540
|
+
context: WorkflowRuntimeContext,
|
|
541
|
+
error: unknown,
|
|
542
|
+
): Promise<void> {
|
|
543
|
+
const errorNodes = definitionDsl.errors ?? [];
|
|
544
|
+
if (!errorNodes.length) {
|
|
545
|
+
return;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
await this.runErrorHandlers(
|
|
549
|
+
errorNodes,
|
|
550
|
+
context,
|
|
551
|
+
error,
|
|
552
|
+
'global',
|
|
553
|
+
undefined,
|
|
554
|
+
undefined,
|
|
555
|
+
);
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
private async runFinallyHandlers(
|
|
559
|
+
definitionDsl: WorkflowDefinitionDsl,
|
|
560
|
+
context: WorkflowRuntimeContext,
|
|
561
|
+
): Promise<void> {
|
|
562
|
+
const finallyNodes = definitionDsl.finally ?? [];
|
|
563
|
+
if (!finallyNodes.length) {
|
|
564
|
+
return;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
await this.writer.writeLog(context.execution, undefined, {
|
|
568
|
+
level: 'info',
|
|
569
|
+
eventType: 'finally.started',
|
|
570
|
+
message: 'Running workflow finally handlers.',
|
|
571
|
+
metadata: {
|
|
572
|
+
handlerNodeCount: finallyNodes.length,
|
|
573
|
+
},
|
|
574
|
+
}, this.nextLogSequence(context));
|
|
575
|
+
|
|
576
|
+
await this.runNodes(finallyNodes, context);
|
|
577
|
+
|
|
578
|
+
await this.writer.writeLog(context.execution, undefined, {
|
|
579
|
+
level: 'info',
|
|
580
|
+
eventType: 'finally.completed',
|
|
581
|
+
message: 'Workflow finally handlers completed.',
|
|
582
|
+
metadata: {
|
|
583
|
+
handlerNodeCount: finallyNodes.length,
|
|
584
|
+
},
|
|
585
|
+
}, this.nextLogSequence(context));
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
private async runLocalErrorHandlers(
|
|
589
|
+
node: WorkflowNodeDefinition,
|
|
590
|
+
context: WorkflowRuntimeContext,
|
|
591
|
+
error: unknown,
|
|
592
|
+
): Promise<void> {
|
|
593
|
+
const errorNodes = node.errors ?? [];
|
|
594
|
+
if (!errorNodes.length) {
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
await this.runErrorHandlers(
|
|
599
|
+
errorNodes,
|
|
600
|
+
context,
|
|
601
|
+
error,
|
|
602
|
+
'local',
|
|
603
|
+
node.id,
|
|
604
|
+
context.stepExecution?.stepExecutionKey,
|
|
605
|
+
);
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
private async runErrorHandlers(
|
|
609
|
+
errorNodes: WorkflowNodeDefinition[],
|
|
610
|
+
context: WorkflowRuntimeContext,
|
|
611
|
+
error: unknown,
|
|
612
|
+
scope: 'global' | 'local',
|
|
613
|
+
sourceNodeId?: string,
|
|
614
|
+
sourceStepExecutionKey?: string,
|
|
615
|
+
): Promise<void> {
|
|
616
|
+
const errorContext = this.buildErrorContext(error, sourceNodeId, sourceStepExecutionKey);
|
|
617
|
+
|
|
618
|
+
await this.writer.writeLog(context.execution, undefined, {
|
|
619
|
+
level: 'warn',
|
|
620
|
+
eventType: `error-handler.${scope}.started`,
|
|
621
|
+
message:
|
|
622
|
+
scope === 'global'
|
|
623
|
+
? 'Running workflow-level error handlers.'
|
|
624
|
+
: `Running local error handlers for node ${sourceNodeId}.`,
|
|
625
|
+
context: errorContext,
|
|
626
|
+
metadata: {
|
|
627
|
+
sourceNodeId,
|
|
628
|
+
sourceStepExecutionKey,
|
|
629
|
+
handlerNodeCount: errorNodes.length,
|
|
630
|
+
},
|
|
631
|
+
}, this.nextLogSequence(context));
|
|
632
|
+
|
|
633
|
+
try {
|
|
634
|
+
await this.runNodes(errorNodes, {
|
|
635
|
+
...context,
|
|
636
|
+
error: errorContext,
|
|
637
|
+
parentNodeId: sourceNodeId ?? context.parentNodeId,
|
|
638
|
+
parentStepExecutionKey:
|
|
639
|
+
sourceStepExecutionKey ?? context.parentStepExecutionKey,
|
|
640
|
+
});
|
|
641
|
+
} catch (handlerError) {
|
|
642
|
+
await this.writer.writeLog(context.execution, undefined, {
|
|
643
|
+
level: 'error',
|
|
644
|
+
eventType: `error-handler.${scope}.failed`,
|
|
645
|
+
message: `Error handler failed: ${this.errorMessage(handlerError)}.`,
|
|
646
|
+
context: this.summarizeError(handlerError),
|
|
647
|
+
metadata: {
|
|
648
|
+
originalError: errorContext,
|
|
649
|
+
sourceNodeId,
|
|
650
|
+
sourceStepExecutionKey,
|
|
651
|
+
},
|
|
652
|
+
}, this.nextLogSequence(context));
|
|
653
|
+
return;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
await this.writer.writeLog(context.execution, undefined, {
|
|
657
|
+
level: 'info',
|
|
658
|
+
eventType: `error-handler.${scope}.completed`,
|
|
659
|
+
message:
|
|
660
|
+
scope === 'global'
|
|
661
|
+
? 'Workflow-level error handlers completed.'
|
|
662
|
+
: `Local error handlers completed for node ${sourceNodeId}.`,
|
|
663
|
+
context: errorContext,
|
|
664
|
+
metadata: {
|
|
665
|
+
sourceNodeId,
|
|
666
|
+
sourceStepExecutionKey,
|
|
667
|
+
},
|
|
668
|
+
}, this.nextLogSequence(context));
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
private buildErrorContext(
|
|
672
|
+
error: unknown,
|
|
673
|
+
nodeId?: string,
|
|
674
|
+
stepExecutionKey?: string,
|
|
675
|
+
): Record<string, any> {
|
|
676
|
+
const summary = this.summarizeError(error);
|
|
677
|
+
return {
|
|
678
|
+
...summary,
|
|
679
|
+
message: this.errorMessage(error),
|
|
680
|
+
nodeId,
|
|
681
|
+
stepExecutionKey,
|
|
682
|
+
};
|
|
683
|
+
}
|
|
684
|
+
|
|
503
685
|
private assertDefinitionYaml(value: any): WorkflowDefinitionDsl {
|
|
504
686
|
if (!value || typeof value !== 'string') {
|
|
505
687
|
throw new BadRequestException(
|
|
@@ -627,6 +809,7 @@ export class WorkflowRuntimeService {
|
|
|
627
809
|
...(node.then ?? []),
|
|
628
810
|
...(node.else ?? []),
|
|
629
811
|
...(node.defaults ?? []),
|
|
812
|
+
...(node.errors ?? []),
|
|
630
813
|
...Object.values(node.cases ?? {}).flat(),
|
|
631
814
|
];
|
|
632
815
|
|
|
@@ -660,6 +843,58 @@ export class WorkflowRuntimeService {
|
|
|
660
843
|
};
|
|
661
844
|
}
|
|
662
845
|
|
|
846
|
+
private getRuntimeContextOutput(
|
|
847
|
+
node: WorkflowNodeDefinition,
|
|
848
|
+
output: Record<string, any>,
|
|
849
|
+
): Record<string, any> {
|
|
850
|
+
const hiddenOutputPaths =
|
|
851
|
+
this.registry
|
|
852
|
+
.getMetadata(node.type)
|
|
853
|
+
.authoring?.outputs?.filter(
|
|
854
|
+
(definition) => definition.includeInRuntimeContext === false,
|
|
855
|
+
)
|
|
856
|
+
.map((definition) => definition.path ?? definition.key)
|
|
857
|
+
.filter(Boolean) ?? [];
|
|
858
|
+
|
|
859
|
+
if (!hiddenOutputPaths.length || !output || typeof output !== 'object') {
|
|
860
|
+
return output;
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
const runtimeOutput = this.cloneOutput(output);
|
|
864
|
+
hiddenOutputPaths.forEach((path) => {
|
|
865
|
+
this.deletePath(runtimeOutput, path);
|
|
866
|
+
});
|
|
867
|
+
|
|
868
|
+
return runtimeOutput;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
private cloneOutput(output: Record<string, any>): Record<string, any> {
|
|
872
|
+
if (typeof structuredClone === 'function') {
|
|
873
|
+
return structuredClone(output);
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
return JSON.parse(JSON.stringify(output));
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
private deletePath(target: Record<string, any>, path: string) {
|
|
880
|
+
const parts = path.split('.').filter(Boolean);
|
|
881
|
+
if (!parts.length) {
|
|
882
|
+
return;
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
let cursor: any = target;
|
|
886
|
+
for (let index = 0; index < parts.length - 1; index += 1) {
|
|
887
|
+
cursor = cursor?.[parts[index]];
|
|
888
|
+
if (!cursor || typeof cursor !== 'object') {
|
|
889
|
+
return;
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
if (cursor && typeof cursor === 'object') {
|
|
894
|
+
delete cursor[parts[parts.length - 1]];
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
|
|
663
898
|
private summarizeValue(value: any): any {
|
|
664
899
|
if (Array.isArray(value)) {
|
|
665
900
|
return {
|
package/src/solid-core.module.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import "multer";
|
|
2
|
-
import { Global,
|
|
3
|
-
import * as express from "express";
|
|
2
|
+
import { Global, Module } from "@nestjs/common";
|
|
4
3
|
import { ConfigModule, ConfigService } from "@nestjs/config";
|
|
5
4
|
import {
|
|
6
5
|
APP_FILTER,
|
|
@@ -38,6 +37,8 @@ import { MqDashboardQueueNameVariableOptionsProvider } from "./services/selectio
|
|
|
38
37
|
import { PseudoForeignKeySelectionProvider } from "./services/selection-providers/pseudo-foreign-key-selection-provider.service";
|
|
39
38
|
import { ModuleMetadataSeederService } from "./seeders/module-metadata-seeder.service";
|
|
40
39
|
import { ModuleTestDataService } from "./seeders/module-test-data.service";
|
|
40
|
+
import { DraftPublishHelperService } from "./services/draft-publish-helper.service";
|
|
41
|
+
import { InternationalisationHelperService } from "./services/internationalisation-helper.service";
|
|
41
42
|
import { CrudHelperService } from "./services/crud-helper.service";
|
|
42
43
|
import { DatasourceManagementService } from "./services/datasource-management.service";
|
|
43
44
|
import { DatasourceIntrospectionService } from "./services/datasource-introspection.service";
|
|
@@ -56,10 +57,10 @@ import { ModulePackageService } from "./services/module-package.service";
|
|
|
56
57
|
import { SolidIntrospectService } from "./services/solid-introspect.service";
|
|
57
58
|
// import { ListOfComputedFieldProvider } from './providers/list-of-computed-field-provider.service';
|
|
58
59
|
import { ServeStaticModule } from "@nestjs/serve-static";
|
|
59
|
-
import {
|
|
60
|
+
import { basename, join } from "path";
|
|
60
61
|
import { RefreshModelCommand } from "./commands/refresh-model.command";
|
|
61
62
|
import { MediaController } from "./controllers/media.controller";
|
|
62
|
-
import { INLINE_SAFE_EXTENSIONS } from "./constants/media-file-types";
|
|
63
|
+
import { getLowercaseFileExtension, INLINE_SAFE_EXTENSIONS } from "./constants/media-file-types";
|
|
63
64
|
|
|
64
65
|
import { RefreshModuleCommand } from "./commands/refresh-module.command";
|
|
65
66
|
import { ModelMetadataSubscriber } from "./subscribers/model-metadata.subscriber";
|
|
@@ -96,6 +97,7 @@ import { GoogleAuthenticationController } from "./controllers/google-authenticat
|
|
|
96
97
|
import { MenuItemMetadataController } from "./controllers/menu-item-metadata.controller";
|
|
97
98
|
import { MqMessageQueueController } from "./controllers/mq-message-queue.controller";
|
|
98
99
|
import { MqMessageController } from "./controllers/mq-message.controller";
|
|
100
|
+
import { MpinAuthenticationController } from "./controllers/mpin-authentication.controller";
|
|
99
101
|
import { OTPAuthenticationController } from "./controllers/otp-authentication.controller";
|
|
100
102
|
import { ServiceController } from "./controllers/service.controller";
|
|
101
103
|
import { SmsTemplateController } from "./controllers/sms-template.controller";
|
|
@@ -165,8 +167,10 @@ import { TwilioSmsQueueSubscriberRedis } from "./jobs/redis/twilio-sms-subscribe
|
|
|
165
167
|
import { UserRegistrationListener } from "./listeners/user-registration.listener";
|
|
166
168
|
import { GoogleOauthStrategy } from "./passport-strategies/google-oauth.strategy";
|
|
167
169
|
import { ApiKeyService } from "./services/api-key.service";
|
|
170
|
+
import { MpinService } from "./services/mpin.service";
|
|
168
171
|
import { ActiveSessionStorageService } from "./services/active-session-storage.service";
|
|
169
172
|
import { AuthenticationService } from "./services/authentication.service";
|
|
173
|
+
import { MetadataValidationService } from "./services/metadata-validation.service";
|
|
170
174
|
import { BcryptService } from "./services/bcrypt.service";
|
|
171
175
|
import { UuidExternalIdEntityComputedFieldProvider } from "./services/computed-fields/entity/uuid-externalid-entity-computed-field-provider.service";
|
|
172
176
|
import { UuidExternalIdComputedFieldProvider } from "./services/computed-fields/uuid-external-id-computed-field-provider.service";
|
|
@@ -244,6 +248,7 @@ import { Setting } from './entities/setting.entity';
|
|
|
244
248
|
import { UserActivityHistory } from './entities/user-activity-history.entity';
|
|
245
249
|
import { UserViewMetadata } from './entities/user-view-metadata.entity';
|
|
246
250
|
import { UserApiKey } from './entities/user-api-key.entity';
|
|
251
|
+
import { UserDeviceCredential } from './entities/user-device-credential.entity';
|
|
247
252
|
import { User } from './entities/user.entity';
|
|
248
253
|
import { HttpExceptionFilter } from './filters/http-exception.filter';
|
|
249
254
|
import { ModelMetadataHelperService } from './helpers/model-metadata-helper.service';
|
|
@@ -316,6 +321,7 @@ import { SmsTemplateRepository } from './repository/sms-template.repository';
|
|
|
316
321
|
import { UserActivityHistoryRepository } from './repository/user-activity-history.repository';
|
|
317
322
|
import { UserViewMetadataRepository } from './repository/user-view-metadata.repository';
|
|
318
323
|
import { UserApiKeyRepository } from './repository/user-api-key.repository';
|
|
324
|
+
import { UserDeviceCredentialRepository } from './repository/user-device-credential.repository';
|
|
319
325
|
import { UserRepository } from './repository/user.repository';
|
|
320
326
|
import { ViewMetadataRepository } from './repository/view-metadata.repository';
|
|
321
327
|
import { PermissionMetadataSeederService } from './seeders/permission-metadata-seeder.service';
|
|
@@ -441,10 +447,12 @@ import { WorkflowInvocationService } from './services/workflow/workflow-invocati
|
|
|
441
447
|
import { WorkflowNodeRegistryService } from './services/workflow/workflow-node-registry.service';
|
|
442
448
|
import { WorkflowRuntimeService } from './services/workflow/workflow-runtime.service';
|
|
443
449
|
import { WorkflowScheduledTriggerJobService } from './services/workflow/workflow-scheduled-trigger.job';
|
|
450
|
+
import { ExecutionFailNode } from './services/workflow/nodes/execution-fail.node';
|
|
444
451
|
import { ForEachNode } from './services/workflow/nodes/for-each.node';
|
|
445
452
|
import { HttpRequestNode } from './services/workflow/nodes/http-request.node';
|
|
446
453
|
import { IfNode } from './services/workflow/nodes/if.node';
|
|
447
454
|
import { LogWriteNode } from './services/workflow/nodes/log-write.node';
|
|
455
|
+
import { LoopUntilNode } from './services/workflow/nodes/loop-until.node';
|
|
448
456
|
import { ParallelNode } from './services/workflow/nodes/parallel.node';
|
|
449
457
|
import { RuntimePythonNode } from './services/workflow/nodes/runtime-python.node';
|
|
450
458
|
import { SequentialNode } from './services/workflow/nodes/sequential.node';
|
|
@@ -496,6 +504,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
|
|
|
496
504
|
SmsTemplate,
|
|
497
505
|
User,
|
|
498
506
|
UserApiKey,
|
|
507
|
+
UserDeviceCredential,
|
|
499
508
|
UserActivityHistory,
|
|
500
509
|
UserViewMetadata,
|
|
501
510
|
ViewMetadata,
|
|
@@ -533,7 +542,11 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
|
|
|
533
542
|
// else (including svg, html, and any other uploaded file) is forced to download
|
|
534
543
|
// rather than be displayed/executed by the browser, regardless of what mimetype or
|
|
535
544
|
// extension it was uploaded with.
|
|
536
|
-
|
|
545
|
+
// basename first: getLowercaseFileExtension takes a file name, not a path, so a
|
|
546
|
+
// directory containing a dot must not be mistaken for the extension. An
|
|
547
|
+
// extensionless file yields undefined, which is not inline-safe - so it correctly
|
|
548
|
+
// falls through to the forced-download branch.
|
|
549
|
+
if (!INLINE_SAFE_EXTENSIONS.has(getLowercaseFileExtension(basename(path)) ?? '')) {
|
|
537
550
|
res.setHeader("Content-Type", "application/octet-stream");
|
|
538
551
|
res.setHeader("Content-Disposition", "attachment");
|
|
539
552
|
}
|
|
@@ -544,6 +557,19 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
|
|
|
544
557
|
imports: [ConfigModule],
|
|
545
558
|
useFactory: async (configService: ConfigService) => ({
|
|
546
559
|
dest: process.env.AB_MEDIA_UPLOAD_DIR ?? "media-uploads",
|
|
560
|
+
// A global floor under whatever per-field mediaMaxSizeKb restrictions apply, not a
|
|
561
|
+
// replacement for them - some upload paths (e.g. chatter attachments) had no size cap
|
|
562
|
+
// enforced anywhere before this. Must stay >= the largest legitimate per-field limit
|
|
563
|
+
// already configured (chatter's messageAttachments is 102400 KB / 100MB), since Multer
|
|
564
|
+
// enforces this before any of our own field-level checks ever run. Mirrored (read-only,
|
|
565
|
+
// for visibility only - see comment there for why) as the "maxMediaFileSizeMb" setting
|
|
566
|
+
// in default-settings-provider.service.ts; keep both parsing expressions in sync.
|
|
567
|
+
limits: {
|
|
568
|
+
fileSize: (() => {
|
|
569
|
+
const parsedMb = Number(process.env.AB_MEDIA_MAX_FILE_SIZE_MB);
|
|
570
|
+
return (Number.isFinite(parsedMb) && parsedMb > 0 ? parsedMb : 100) * 1024 * 1024;
|
|
571
|
+
})(),
|
|
572
|
+
},
|
|
547
573
|
}),
|
|
548
574
|
inject: [ConfigService],
|
|
549
575
|
}),
|
|
@@ -587,6 +613,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
|
|
|
587
613
|
GupshupWebhookController,
|
|
588
614
|
MetaCloudWhatsappWebhookController,
|
|
589
615
|
OTPAuthenticationController,
|
|
616
|
+
MpinAuthenticationController,
|
|
590
617
|
PermissionMetadataController,
|
|
591
618
|
RoleMetadataController,
|
|
592
619
|
SavedFiltersController,
|
|
@@ -642,6 +669,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
|
|
|
642
669
|
ModuleMetadataExplorerService,
|
|
643
670
|
ModuleMetadataHelperService,
|
|
644
671
|
ModulePackageService,
|
|
672
|
+
MetadataValidationService,
|
|
645
673
|
ModelMetadataService,
|
|
646
674
|
ModelMetadataHelperService,
|
|
647
675
|
FieldMetadataService,
|
|
@@ -654,6 +682,8 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
|
|
|
654
682
|
InfoService,
|
|
655
683
|
SolidIntrospectService,
|
|
656
684
|
DiscoveryService,
|
|
685
|
+
DraftPublishHelperService,
|
|
686
|
+
InternationalisationHelperService,
|
|
657
687
|
CrudHelperService,
|
|
658
688
|
CRUDService,
|
|
659
689
|
Reflector,
|
|
@@ -749,6 +779,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
|
|
|
749
779
|
ApiKeyGuard,
|
|
750
780
|
MediaSignedUrlGuard,
|
|
751
781
|
ApiKeyService,
|
|
782
|
+
MpinService,
|
|
752
783
|
ActiveSessionStorageService,
|
|
753
784
|
AuthenticationService,
|
|
754
785
|
GoogleAuthenticationController,
|
|
@@ -818,6 +849,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
|
|
|
818
849
|
PermissionMetadataSeederService,
|
|
819
850
|
UserService,
|
|
820
851
|
UserApiKeyRepository,
|
|
852
|
+
UserDeviceCredentialRepository,
|
|
821
853
|
UserRepository,
|
|
822
854
|
SettingService,
|
|
823
855
|
ConcatComputedFieldProvider,
|
|
@@ -947,10 +979,12 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
|
|
|
947
979
|
WorkflowDefinitionValidatorService,
|
|
948
980
|
WorkflowNodeRegistryService,
|
|
949
981
|
WorkflowScheduledTriggerJobService,
|
|
982
|
+
ExecutionFailNode,
|
|
950
983
|
LogWriteNode,
|
|
951
984
|
HttpRequestNode,
|
|
952
985
|
IfNode,
|
|
953
986
|
ForEachNode,
|
|
987
|
+
LoopUntilNode,
|
|
954
988
|
ParallelNode,
|
|
955
989
|
RuntimePythonNode,
|
|
956
990
|
SequentialNode,
|
|
@@ -972,6 +1006,8 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
|
|
|
972
1006
|
ChatterMessageRepository,
|
|
973
1007
|
ChatterMessageService,
|
|
974
1008
|
ConfigModule,
|
|
1009
|
+
DraftPublishHelperService,
|
|
1010
|
+
InternationalisationHelperService,
|
|
975
1011
|
CrudHelperService,
|
|
976
1012
|
CRUDService,
|
|
977
1013
|
CsvService,
|
|
@@ -994,6 +1030,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
|
|
|
994
1030
|
SmsFactory,
|
|
995
1031
|
MediaService,
|
|
996
1032
|
MediaStorageProviderMetadataService,
|
|
1033
|
+
MetadataValidationService,
|
|
997
1034
|
ModelMetadataHelperService,
|
|
998
1035
|
ModelMetadataService,
|
|
999
1036
|
ModuleMetadataService,
|
|
@@ -1033,13 +1070,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
|
|
|
1033
1070
|
WorkflowExpressionService,
|
|
1034
1071
|
],
|
|
1035
1072
|
})
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
express.json({ limit: "10mb" }),
|
|
1041
|
-
express.urlencoded({ limit: "10mb", extended: true }),
|
|
1042
|
-
)
|
|
1043
|
-
.forRoutes("*");
|
|
1044
|
-
}
|
|
1045
|
-
}
|
|
1073
|
+
// Body-size limits live in bootstrapSolidApp (see SolidBootstrapOptions.bodyLimit).
|
|
1074
|
+
// They cannot be applied here: module middleware is registered in registerRouter(),
|
|
1075
|
+
// which runs after Nest's own parser middleware, so anything set here never takes effect.
|
|
1076
|
+
export class SolidCoreModule {}
|