@solidxai/core 0.1.12 → 0.1.13-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/controllers/view-metadata.controller.d.ts +1 -1
- package/dist/controllers/workflow-definition.controller.d.ts +38 -0
- package/dist/controllers/workflow-definition.controller.d.ts.map +1 -0
- package/dist/controllers/workflow-definition.controller.js +272 -0
- package/dist/controllers/workflow-definition.controller.js.map +1 -0
- package/dist/controllers/workflow-execution-artifact.controller.d.ts +24 -0
- package/dist/controllers/workflow-execution-artifact.controller.d.ts.map +1 -0
- package/dist/controllers/workflow-execution-artifact.controller.js +179 -0
- package/dist/controllers/workflow-execution-artifact.controller.js.map +1 -0
- package/dist/controllers/workflow-execution-log.controller.d.ts +24 -0
- package/dist/controllers/workflow-execution-log.controller.d.ts.map +1 -0
- package/dist/controllers/workflow-execution-log.controller.js +179 -0
- package/dist/controllers/workflow-execution-log.controller.js.map +1 -0
- package/dist/controllers/workflow-execution.controller.d.ts +29 -0
- package/dist/controllers/workflow-execution.controller.d.ts.map +1 -0
- package/dist/controllers/workflow-execution.controller.js +227 -0
- package/dist/controllers/workflow-execution.controller.js.map +1 -0
- package/dist/controllers/workflow-secret.controller.d.ts +24 -0
- package/dist/controllers/workflow-secret.controller.d.ts.map +1 -0
- package/dist/controllers/workflow-secret.controller.js +179 -0
- package/dist/controllers/workflow-secret.controller.js.map +1 -0
- package/dist/controllers/workflow-step-execution.controller.d.ts +24 -0
- package/dist/controllers/workflow-step-execution.controller.d.ts.map +1 -0
- package/dist/controllers/workflow-step-execution.controller.js +179 -0
- package/dist/controllers/workflow-step-execution.controller.js.map +1 -0
- package/dist/controllers/workflow-trigger-execution.controller.d.ts +24 -0
- package/dist/controllers/workflow-trigger-execution.controller.d.ts.map +1 -0
- package/dist/controllers/workflow-trigger-execution.controller.js +179 -0
- package/dist/controllers/workflow-trigger-execution.controller.js.map +1 -0
- package/dist/decorators/workflow-field-data-provider.decorator.d.ts +3 -0
- package/dist/decorators/workflow-field-data-provider.decorator.d.ts.map +1 -0
- package/dist/decorators/workflow-field-data-provider.decorator.js +11 -0
- package/dist/decorators/workflow-field-data-provider.decorator.js.map +1 -0
- package/dist/decorators/workflow-node-provider.decorator.d.ts +4 -0
- package/dist/decorators/workflow-node-provider.decorator.d.ts.map +1 -0
- package/dist/decorators/workflow-node-provider.decorator.js +13 -0
- package/dist/decorators/workflow-node-provider.decorator.js.map +1 -0
- package/dist/dtos/create-workflow-definition.dto.d.ts +14 -0
- package/dist/dtos/create-workflow-definition.dto.d.ts.map +1 -0
- package/dist/dtos/create-workflow-definition.dto.js +92 -0
- package/dist/dtos/create-workflow-definition.dto.js.map +1 -0
- package/dist/dtos/create-workflow-execution-artifact.dto.d.ts +22 -0
- package/dist/dtos/create-workflow-execution-artifact.dto.d.ts.map +1 -0
- package/dist/dtos/create-workflow-execution-artifact.dto.js +139 -0
- package/dist/dtos/create-workflow-execution-artifact.dto.js.map +1 -0
- package/dist/dtos/create-workflow-execution-log.dto.d.ts +18 -0
- package/dist/dtos/create-workflow-execution-log.dto.d.ts.map +1 -0
- package/dist/dtos/create-workflow-execution-log.dto.js +116 -0
- package/dist/dtos/create-workflow-execution-log.dto.js.map +1 -0
- package/dist/dtos/create-workflow-execution.dto.d.ts +33 -0
- package/dist/dtos/create-workflow-execution.dto.d.ts.map +1 -0
- package/dist/dtos/create-workflow-execution.dto.js +186 -0
- package/dist/dtos/create-workflow-execution.dto.js.map +1 -0
- package/dist/dtos/create-workflow-secret.dto.d.ts +11 -0
- package/dist/dtos/create-workflow-secret.dto.d.ts.map +1 -0
- package/dist/dtos/create-workflow-secret.dto.js +74 -0
- package/dist/dtos/create-workflow-secret.dto.js.map +1 -0
- package/dist/dtos/create-workflow-step-execution.dto.d.ts +27 -0
- package/dist/dtos/create-workflow-step-execution.dto.d.ts.map +1 -0
- package/dist/dtos/create-workflow-step-execution.dto.js +171 -0
- package/dist/dtos/create-workflow-step-execution.dto.js.map +1 -0
- package/dist/dtos/create-workflow-trigger-execution.dto.d.ts +25 -0
- package/dist/dtos/create-workflow-trigger-execution.dto.d.ts.map +1 -0
- package/dist/dtos/create-workflow-trigger-execution.dto.js +158 -0
- package/dist/dtos/create-workflow-trigger-execution.dto.js.map +1 -0
- package/dist/dtos/execute-workflow.dto.d.ts +7 -0
- package/dist/dtos/execute-workflow.dto.d.ts.map +1 -0
- package/dist/dtos/execute-workflow.dto.js +11 -0
- package/dist/dtos/execute-workflow.dto.js.map +1 -0
- package/dist/dtos/update-workflow-definition.dto.d.ts +15 -0
- package/dist/dtos/update-workflow-definition.dto.d.ts.map +1 -0
- package/dist/dtos/update-workflow-definition.dto.js +97 -0
- package/dist/dtos/update-workflow-definition.dto.js.map +1 -0
- package/dist/dtos/update-workflow-execution-artifact.dto.d.ts +23 -0
- package/dist/dtos/update-workflow-execution-artifact.dto.d.ts.map +1 -0
- package/dist/dtos/update-workflow-execution-artifact.dto.js +143 -0
- package/dist/dtos/update-workflow-execution-artifact.dto.js.map +1 -0
- package/dist/dtos/update-workflow-execution-log.dto.d.ts +19 -0
- package/dist/dtos/update-workflow-execution-log.dto.d.ts.map +1 -0
- package/dist/dtos/update-workflow-execution-log.dto.js +121 -0
- package/dist/dtos/update-workflow-execution-log.dto.js.map +1 -0
- package/dist/dtos/update-workflow-execution.dto.d.ts +34 -0
- package/dist/dtos/update-workflow-execution.dto.d.ts.map +1 -0
- package/dist/dtos/update-workflow-execution.dto.js +190 -0
- package/dist/dtos/update-workflow-execution.dto.js.map +1 -0
- package/dist/dtos/update-workflow-secret.dto.d.ts +12 -0
- package/dist/dtos/update-workflow-secret.dto.d.ts.map +1 -0
- package/dist/dtos/update-workflow-secret.dto.js +80 -0
- package/dist/dtos/update-workflow-secret.dto.js.map +1 -0
- package/dist/dtos/update-workflow-step-execution.dto.d.ts +28 -0
- package/dist/dtos/update-workflow-step-execution.dto.d.ts.map +1 -0
- package/dist/dtos/update-workflow-step-execution.dto.js +175 -0
- package/dist/dtos/update-workflow-step-execution.dto.js.map +1 -0
- package/dist/dtos/update-workflow-trigger-execution.dto.d.ts +26 -0
- package/dist/dtos/update-workflow-trigger-execution.dto.d.ts.map +1 -0
- package/dist/dtos/update-workflow-trigger-execution.dto.js +163 -0
- package/dist/dtos/update-workflow-trigger-execution.dto.js.map +1 -0
- package/dist/dtos/validate-workflow-definition.dto.d.ts +4 -0
- package/dist/dtos/validate-workflow-definition.dto.d.ts.map +1 -0
- package/dist/dtos/validate-workflow-definition.dto.js +11 -0
- package/dist/dtos/validate-workflow-definition.dto.js.map +1 -0
- package/dist/entities/saved-filters.entity.js +3 -3
- package/dist/entities/saved-filters.entity.js.map +1 -1
- package/dist/entities/workflow-definition.entity.d.ts +15 -0
- package/dist/entities/workflow-definition.entity.d.ts.map +1 -0
- package/dist/entities/workflow-definition.entity.js +77 -0
- package/dist/entities/workflow-definition.entity.js.map +1 -0
- package/dist/entities/workflow-execution-artifact.entity.d.ts +23 -0
- package/dist/entities/workflow-execution-artifact.entity.d.ts.map +1 -0
- package/dist/entities/workflow-execution-artifact.entity.js +113 -0
- package/dist/entities/workflow-execution-artifact.entity.js.map +1 -0
- package/dist/entities/workflow-execution-log.entity.d.ts +19 -0
- package/dist/entities/workflow-execution-log.entity.d.ts.map +1 -0
- package/dist/entities/workflow-execution-log.entity.js +95 -0
- package/dist/entities/workflow-execution-log.entity.js.map +1 -0
- package/dist/entities/workflow-execution.entity.d.ts +28 -0
- package/dist/entities/workflow-execution.entity.d.ts.map +1 -0
- package/dist/entities/workflow-execution.entity.js +124 -0
- package/dist/entities/workflow-execution.entity.js.map +1 -0
- package/dist/entities/workflow-secret.entity.d.ts +12 -0
- package/dist/entities/workflow-secret.entity.d.ts.map +1 -0
- package/dist/entities/workflow-secret.entity.js +66 -0
- package/dist/entities/workflow-secret.entity.js.map +1 -0
- package/dist/entities/workflow-step-execution.entity.d.ts +28 -0
- package/dist/entities/workflow-step-execution.entity.d.ts.map +1 -0
- package/dist/entities/workflow-step-execution.entity.js +138 -0
- package/dist/entities/workflow-step-execution.entity.js.map +1 -0
- package/dist/entities/workflow-trigger-execution.entity.d.ts +26 -0
- package/dist/entities/workflow-trigger-execution.entity.d.ts.map +1 -0
- package/dist/entities/workflow-trigger-execution.entity.js +127 -0
- package/dist/entities/workflow-trigger-execution.entity.js.map +1 -0
- package/dist/factories/sms.factory.d.ts.map +1 -1
- package/dist/factories/sms.factory.js +4 -1
- package/dist/factories/sms.factory.js.map +1 -1
- package/dist/helpers/solid-registry.d.ts +5 -1
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +17 -0
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/workflow-node-handler.interface.d.ts +5 -0
- package/dist/interfaces/workflow-node-handler.interface.d.ts.map +1 -0
- package/dist/interfaces/workflow-node-handler.interface.js +3 -0
- package/dist/interfaces/workflow-node-handler.interface.js.map +1 -0
- package/dist/interfaces.d.ts +24 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/database/workflow-execution-publisher-database.service.d.ts +12 -0
- package/dist/jobs/database/workflow-execution-publisher-database.service.d.ts.map +1 -0
- package/dist/jobs/database/workflow-execution-publisher-database.service.js +39 -0
- package/dist/jobs/database/workflow-execution-publisher-database.service.js.map +1 -0
- package/dist/jobs/database/workflow-execution-queue-options-database.d.ts +8 -0
- package/dist/jobs/database/workflow-execution-queue-options-database.d.ts.map +1 -0
- package/dist/jobs/database/workflow-execution-queue-options-database.js +10 -0
- package/dist/jobs/database/workflow-execution-queue-options-database.js.map +1 -0
- package/dist/jobs/database/workflow-execution-subscriber-database.service.d.ts +19 -0
- package/dist/jobs/database/workflow-execution-subscriber-database.service.d.ts.map +1 -0
- package/dist/jobs/database/workflow-execution-subscriber-database.service.js +55 -0
- package/dist/jobs/database/workflow-execution-subscriber-database.service.js.map +1 -0
- package/dist/jobs/rabbitmq/workflow-execution-publisher.service.d.ts +12 -0
- package/dist/jobs/rabbitmq/workflow-execution-publisher.service.d.ts.map +1 -0
- package/dist/jobs/rabbitmq/workflow-execution-publisher.service.js +39 -0
- package/dist/jobs/rabbitmq/workflow-execution-publisher.service.js.map +1 -0
- package/dist/jobs/rabbitmq/workflow-execution-queue-options.d.ts +8 -0
- package/dist/jobs/rabbitmq/workflow-execution-queue-options.d.ts.map +1 -0
- package/dist/jobs/rabbitmq/workflow-execution-queue-options.js +10 -0
- package/dist/jobs/rabbitmq/workflow-execution-queue-options.js.map +1 -0
- package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.d.ts +17 -0
- package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.js +52 -0
- package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.js.map +1 -0
- package/dist/jobs/redis/workflow-execution-publisher-redis.service.d.ts +12 -0
- package/dist/jobs/redis/workflow-execution-publisher-redis.service.d.ts.map +1 -0
- package/dist/jobs/redis/workflow-execution-publisher-redis.service.js +39 -0
- package/dist/jobs/redis/workflow-execution-publisher-redis.service.js.map +1 -0
- package/dist/jobs/redis/workflow-execution-queue-options-redis.d.ts +8 -0
- package/dist/jobs/redis/workflow-execution-queue-options-redis.d.ts.map +1 -0
- package/dist/jobs/redis/workflow-execution-queue-options-redis.js +10 -0
- package/dist/jobs/redis/workflow-execution-queue-options-redis.js.map +1 -0
- package/dist/jobs/redis/workflow-execution-subscriber-redis.service.d.ts +17 -0
- package/dist/jobs/redis/workflow-execution-subscriber-redis.service.d.ts.map +1 -0
- package/dist/jobs/redis/workflow-execution-subscriber-redis.service.js +52 -0
- package/dist/jobs/redis/workflow-execution-subscriber-redis.service.js.map +1 -0
- package/dist/repository/security-rule.repository.d.ts +1 -0
- package/dist/repository/security-rule.repository.d.ts.map +1 -1
- package/dist/repository/security-rule.repository.js +28 -7
- package/dist/repository/security-rule.repository.js.map +1 -1
- package/dist/repository/workflow-definition.repository.d.ts +12 -0
- package/dist/repository/workflow-definition.repository.d.ts.map +1 -0
- package/dist/repository/workflow-definition.repository.js +39 -0
- package/dist/repository/workflow-definition.repository.js.map +1 -0
- package/dist/repository/workflow-execution-artifact.repository.d.ts +12 -0
- package/dist/repository/workflow-execution-artifact.repository.d.ts.map +1 -0
- package/dist/repository/workflow-execution-artifact.repository.js +39 -0
- package/dist/repository/workflow-execution-artifact.repository.js.map +1 -0
- package/dist/repository/workflow-execution-log.repository.d.ts +12 -0
- package/dist/repository/workflow-execution-log.repository.d.ts.map +1 -0
- package/dist/repository/workflow-execution-log.repository.js +39 -0
- package/dist/repository/workflow-execution-log.repository.js.map +1 -0
- package/dist/repository/workflow-execution.repository.d.ts +12 -0
- package/dist/repository/workflow-execution.repository.d.ts.map +1 -0
- package/dist/repository/workflow-execution.repository.js +39 -0
- package/dist/repository/workflow-execution.repository.js.map +1 -0
- package/dist/repository/workflow-secret.repository.d.ts +12 -0
- package/dist/repository/workflow-secret.repository.d.ts.map +1 -0
- package/dist/repository/workflow-secret.repository.js +39 -0
- package/dist/repository/workflow-secret.repository.js.map +1 -0
- package/dist/repository/workflow-step-execution.repository.d.ts +12 -0
- package/dist/repository/workflow-step-execution.repository.d.ts.map +1 -0
- package/dist/repository/workflow-step-execution.repository.js +39 -0
- package/dist/repository/workflow-step-execution.repository.js.map +1 -0
- package/dist/repository/workflow-trigger-execution.repository.d.ts +12 -0
- package/dist/repository/workflow-trigger-execution.repository.d.ts.map +1 -0
- package/dist/repository/workflow-trigger-execution.repository.js +39 -0
- package/dist/repository/workflow-trigger-execution.repository.js.map +1 -0
- package/dist/seeders/module-metadata-seeder.service.d.ts +6 -0
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +141 -0
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +11437 -5567
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +1 -1
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/crud-helper.service.d.ts +16 -1
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +99 -22
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/crud.service.d.ts +1 -0
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +15 -0
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/solid-introspect.service.d.ts +1 -0
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +12 -0
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/services/view-metadata.service.d.ts +5 -1
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +63 -14
- package/dist/services/view-metadata.service.js.map +1 -1
- package/dist/services/workflow/nodes/for-each.node.d.ts +6 -0
- package/dist/services/workflow/nodes/for-each.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/for-each.node.js +95 -0
- package/dist/services/workflow/nodes/for-each.node.js.map +1 -0
- package/dist/services/workflow/nodes/http-request.node.d.ts +13 -0
- package/dist/services/workflow/nodes/http-request.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/http-request.node.js +549 -0
- package/dist/services/workflow/nodes/http-request.node.js.map +1 -0
- package/dist/services/workflow/nodes/if.node.d.ts +6 -0
- package/dist/services/workflow/nodes/if.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/if.node.js +93 -0
- package/dist/services/workflow/nodes/if.node.js.map +1 -0
- package/dist/services/workflow/nodes/log-write.node.d.ts +6 -0
- package/dist/services/workflow/nodes/log-write.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/log-write.node.js +229 -0
- package/dist/services/workflow/nodes/log-write.node.js.map +1 -0
- package/dist/services/workflow/nodes/parallel.node.d.ts +6 -0
- package/dist/services/workflow/nodes/parallel.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/parallel.node.js +76 -0
- package/dist/services/workflow/nodes/parallel.node.js.map +1 -0
- package/dist/services/workflow/nodes/runtime-python.node.d.ts +13 -0
- package/dist/services/workflow/nodes/runtime-python.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/runtime-python.node.js +522 -0
- package/dist/services/workflow/nodes/runtime-python.node.js.map +1 -0
- package/dist/services/workflow/nodes/sequential.node.d.ts +6 -0
- package/dist/services/workflow/nodes/sequential.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/sequential.node.js +61 -0
- package/dist/services/workflow/nodes/sequential.node.js.map +1 -0
- package/dist/services/workflow/nodes/solidx-api.helpers.d.ts +25 -0
- package/dist/services/workflow/nodes/solidx-api.helpers.d.ts.map +1 -0
- package/dist/services/workflow/nodes/solidx-api.helpers.js +143 -0
- package/dist/services/workflow/nodes/solidx-api.helpers.js.map +1 -0
- package/dist/services/workflow/nodes/solidx-crud.nodes.d.ts +48 -0
- package/dist/services/workflow/nodes/solidx-crud.nodes.d.ts.map +1 -0
- package/dist/services/workflow/nodes/solidx-crud.nodes.js +475 -0
- package/dist/services/workflow/nodes/solidx-crud.nodes.js.map +1 -0
- package/dist/services/workflow/nodes/solidx-login.node.d.ts +6 -0
- package/dist/services/workflow/nodes/solidx-login.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/solidx-login.node.js +208 -0
- package/dist/services/workflow/nodes/solidx-login.node.js.map +1 -0
- package/dist/services/workflow/nodes/solidx-send-email.node.d.ts +11 -0
- package/dist/services/workflow/nodes/solidx-send-email.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/solidx-send-email.node.js +437 -0
- package/dist/services/workflow/nodes/solidx-send-email.node.js.map +1 -0
- package/dist/services/workflow/nodes/solidx-send-sms.node.d.ts +10 -0
- package/dist/services/workflow/nodes/solidx-send-sms.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/solidx-send-sms.node.js +347 -0
- package/dist/services/workflow/nodes/solidx-send-sms.node.js.map +1 -0
- package/dist/services/workflow/nodes/switch.node.d.ts +7 -0
- package/dist/services/workflow/nodes/switch.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/switch.node.js +113 -0
- package/dist/services/workflow/nodes/switch.node.js.map +1 -0
- package/dist/services/workflow/workflow-definition-metadata-sync.service.d.ts +19 -0
- package/dist/services/workflow/workflow-definition-metadata-sync.service.d.ts.map +1 -0
- package/dist/services/workflow/workflow-definition-metadata-sync.service.js +187 -0
- package/dist/services/workflow/workflow-definition-metadata-sync.service.js.map +1 -0
- package/dist/services/workflow/workflow-definition-validator.service.d.ts +13 -0
- package/dist/services/workflow/workflow-definition-validator.service.d.ts.map +1 -0
- package/dist/services/workflow/workflow-definition-validator.service.js +163 -0
- package/dist/services/workflow/workflow-definition-validator.service.js.map +1 -0
- package/dist/services/workflow/workflow-execution-writer.service.d.ts +26 -0
- package/dist/services/workflow/workflow-execution-writer.service.d.ts.map +1 -0
- package/dist/services/workflow/workflow-execution-writer.service.js +191 -0
- package/dist/services/workflow/workflow-execution-writer.service.js.map +1 -0
- package/dist/services/workflow/workflow-expression.service.d.ts +14 -0
- package/dist/services/workflow/workflow-expression.service.d.ts.map +1 -0
- package/dist/services/workflow/workflow-expression.service.js +152 -0
- package/dist/services/workflow/workflow-expression.service.js.map +1 -0
- package/dist/services/workflow/workflow-invocation.service.d.ts +11 -0
- package/dist/services/workflow/workflow-invocation.service.d.ts.map +1 -0
- package/dist/services/workflow/workflow-invocation.service.js +37 -0
- package/dist/services/workflow/workflow-invocation.service.js.map +1 -0
- package/dist/services/workflow/workflow-node-registry.service.d.ts +18 -0
- package/dist/services/workflow/workflow-node-registry.service.d.ts.map +1 -0
- package/dist/services/workflow/workflow-node-registry.service.js +110 -0
- package/dist/services/workflow/workflow-node-registry.service.js.map +1 -0
- package/dist/services/workflow/workflow-runtime.service.d.ts +53 -0
- package/dist/services/workflow/workflow-runtime.service.d.ts.map +1 -0
- package/dist/services/workflow/workflow-runtime.service.js +541 -0
- package/dist/services/workflow/workflow-runtime.service.js.map +1 -0
- package/dist/services/workflow/workflow-scheduled-trigger.job.d.ts +10 -0
- package/dist/services/workflow/workflow-scheduled-trigger.job.d.ts.map +1 -0
- package/dist/services/workflow/workflow-scheduled-trigger.job.js +37 -0
- package/dist/services/workflow/workflow-scheduled-trigger.job.js.map +1 -0
- package/dist/services/workflow-definition.service.d.ts +52 -0
- package/dist/services/workflow-definition.service.d.ts.map +1 -0
- package/dist/services/workflow-definition.service.js +251 -0
- package/dist/services/workflow-definition.service.js.map +1 -0
- package/dist/services/workflow-execution-artifact.service.d.ts +12 -0
- package/dist/services/workflow-execution-artifact.service.d.ts.map +1 -0
- package/dist/services/workflow-execution-artifact.service.js +38 -0
- package/dist/services/workflow-execution-artifact.service.js.map +1 -0
- package/dist/services/workflow-execution-log.service.d.ts +12 -0
- package/dist/services/workflow-execution-log.service.d.ts.map +1 -0
- package/dist/services/workflow-execution-log.service.js +38 -0
- package/dist/services/workflow-execution-log.service.js.map +1 -0
- package/dist/services/workflow-execution.service.d.ts +12 -0
- package/dist/services/workflow-execution.service.d.ts.map +1 -0
- package/dist/services/workflow-execution.service.js +38 -0
- package/dist/services/workflow-execution.service.js.map +1 -0
- package/dist/services/workflow-secret.service.d.ts +25 -0
- package/dist/services/workflow-secret.service.d.ts.map +1 -0
- package/dist/services/workflow-secret.service.js +152 -0
- package/dist/services/workflow-secret.service.js.map +1 -0
- package/dist/services/workflow-step-execution.service.d.ts +12 -0
- package/dist/services/workflow-step-execution.service.d.ts.map +1 -0
- package/dist/services/workflow-step-execution.service.js +38 -0
- package/dist/services/workflow-step-execution.service.js.map +1 -0
- package/dist/services/workflow-trigger-execution.service.d.ts +12 -0
- package/dist/services/workflow-trigger-execution.service.d.ts.map +1 -0
- package/dist/services/workflow-trigger-execution.service.js +38 -0
- package/dist/services/workflow-trigger-execution.service.js.map +1 -0
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +117 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist/transformers/empty-string-to-null-transformer.d.ts +4 -0
- package/dist/transformers/empty-string-to-null-transformer.d.ts.map +1 -0
- package/dist/transformers/empty-string-to-null-transformer.js +12 -0
- package/dist/transformers/empty-string-to-null-transformer.js.map +1 -0
- package/dist/types/workflow-dsl.types.d.ts +277 -0
- package/dist/types/workflow-dsl.types.d.ts.map +1 -0
- package/dist/types/workflow-dsl.types.js +3 -0
- package/dist/types/workflow-dsl.types.js.map +1 -0
- package/dist/types/workflow-execution-queue.types.d.ts +4 -0
- package/dist/types/workflow-execution-queue.types.d.ts.map +1 -0
- package/dist/types/workflow-execution-queue.types.js +3 -0
- package/dist/types/workflow-execution-queue.types.js.map +1 -0
- package/package.json +3 -2
- package/src/controllers/workflow-definition.controller.ts +141 -0
- package/src/controllers/workflow-execution-artifact.controller.ts +93 -0
- package/src/controllers/workflow-execution-log.controller.ts +93 -0
- package/src/controllers/workflow-execution.controller.ts +126 -0
- package/src/controllers/workflow-secret.controller.ts +90 -0
- package/src/controllers/workflow-step-execution.controller.ts +93 -0
- package/src/controllers/workflow-trigger-execution.controller.ts +93 -0
- package/src/decorators/workflow-field-data-provider.decorator.ts +7 -0
- package/src/decorators/workflow-node-provider.decorator.ts +14 -0
- package/src/dtos/create-workflow-definition.dto.ts +60 -0
- package/src/dtos/create-workflow-execution-artifact.dto.ts +99 -0
- package/src/dtos/create-workflow-execution-log.dto.ts +80 -0
- package/src/dtos/create-workflow-execution.dto.ts +137 -0
- package/src/dtos/create-workflow-secret.dto.ts +44 -0
- package/src/dtos/create-workflow-step-execution.dto.ts +123 -0
- package/src/dtos/create-workflow-trigger-execution.dto.ts +114 -0
- package/src/dtos/execute-workflow.dto.ts +6 -0
- package/src/dtos/update-workflow-definition.dto.ts +67 -0
- package/src/dtos/update-workflow-execution-artifact.dto.ts +105 -0
- package/src/dtos/update-workflow-execution-log.dto.ts +87 -0
- package/src/dtos/update-workflow-execution.dto.ts +144 -0
- package/src/dtos/update-workflow-secret.dto.ts +53 -0
- package/src/dtos/update-workflow-step-execution.dto.ts +132 -0
- package/src/dtos/update-workflow-trigger-execution.dto.ts +122 -0
- package/src/dtos/validate-workflow-definition.dto.ts +3 -0
- package/src/entities/saved-filters.entity.ts +3 -3
- package/src/entities/workflow-definition.entity.ts +43 -0
- package/src/entities/workflow-execution-artifact.entity.ts +72 -0
- package/src/entities/workflow-execution-log.entity.ts +58 -0
- package/src/entities/workflow-execution.entity.ts +82 -0
- package/src/entities/workflow-secret.entity.ts +33 -0
- package/src/entities/workflow-step-execution.entity.ts +88 -0
- package/src/entities/workflow-trigger-execution.entity.ts +82 -0
- package/src/factories/sms.factory.ts +4 -1
- package/src/helpers/solid-registry.ts +21 -1
- package/src/index.ts +55 -0
- package/src/interfaces/workflow-node-handler.interface.ts +10 -0
- package/src/interfaces.ts +29 -0
- package/src/jobs/database/workflow-execution-publisher-database.service.ts +24 -0
- package/src/jobs/database/workflow-execution-queue-options-database.ts +9 -0
- package/src/jobs/database/workflow-execution-subscriber-database.service.ts +44 -0
- package/src/jobs/rabbitmq/workflow-execution-publisher.service.ts +24 -0
- package/src/jobs/rabbitmq/workflow-execution-queue-options.ts +9 -0
- package/src/jobs/rabbitmq/workflow-execution-subscriber.service.ts +42 -0
- package/src/jobs/redis/workflow-execution-publisher-redis.service.ts +24 -0
- package/src/jobs/redis/workflow-execution-queue-options-redis.ts +9 -0
- package/src/jobs/redis/workflow-execution-subscriber-redis.service.ts +42 -0
- package/src/repository/security-rule.repository.ts +52 -10
- package/src/repository/workflow-definition.repository.ts +19 -0
- package/src/repository/workflow-execution-artifact.repository.ts +19 -0
- package/src/repository/workflow-execution-log.repository.ts +19 -0
- package/src/repository/workflow-execution.repository.ts +19 -0
- package/src/repository/workflow-secret.repository.ts +19 -0
- package/src/repository/workflow-step-execution.repository.ts +19 -0
- package/src/repository/workflow-trigger-execution.repository.ts +19 -0
- package/src/seeders/module-metadata-seeder.service.ts +166 -4
- package/src/seeders/seed-data/solid-core-metadata.json +11437 -5567
- package/src/services/chatter-message.service.ts +5 -1
- package/src/services/crud-helper.service.ts +220 -22
- package/src/services/crud.service.ts +30 -0
- package/src/services/solid-introspect.service.ts +19 -0
- package/src/services/view-metadata.service.ts +87 -21
- package/src/services/workflow/nodes/for-each.node.ts +97 -0
- package/src/services/workflow/nodes/http-request.node.ts +624 -0
- package/src/services/workflow/nodes/if.node.ts +93 -0
- package/src/services/workflow/nodes/log-write.node.ts +232 -0
- package/src/services/workflow/nodes/parallel.node.ts +81 -0
- package/src/services/workflow/nodes/runtime-python.node.ts +571 -0
- package/src/services/workflow/nodes/sequential.node.ts +58 -0
- package/src/services/workflow/nodes/solidx-api.helpers.ts +205 -0
- package/src/services/workflow/nodes/solidx-crud.nodes.ts +511 -0
- package/src/services/workflow/nodes/solidx-login.node.ts +222 -0
- package/src/services/workflow/nodes/solidx-send-email.node.ts +489 -0
- package/src/services/workflow/nodes/solidx-send-sms.node.ts +377 -0
- package/src/services/workflow/nodes/switch.node.ts +125 -0
- package/src/services/workflow/workflow-definition-metadata-sync.service.ts +196 -0
- package/src/services/workflow/workflow-definition-validator.service.ts +223 -0
- package/src/services/workflow/workflow-execution-writer.service.ts +244 -0
- package/src/services/workflow/workflow-expression.service.ts +175 -0
- package/src/services/workflow/workflow-invocation.service.ts +39 -0
- package/src/services/workflow/workflow-node-registry.service.ts +141 -0
- package/src/services/workflow/workflow-runtime.service.ts +699 -0
- package/src/services/workflow/workflow-scheduled-trigger.job.ts +33 -0
- package/src/services/workflow-definition.service.ts +293 -0
- package/src/services/workflow-execution-artifact.service.ts +20 -0
- package/src/services/workflow-execution-log.service.ts +20 -0
- package/src/services/workflow-execution.service.ts +20 -0
- package/src/services/workflow-secret.service.ts +161 -0
- package/src/services/workflow-step-execution.service.ts +20 -0
- package/src/services/workflow-trigger-execution.service.ts +20 -0
- package/src/solid-core.module.ts +124 -0
- package/src/transformers/empty-string-to-null-transformer.ts +11 -0
- package/src/types/workflow-dsl.types.ts +987 -0
- package/src/types/workflow-execution-queue.types.ts +3 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
import { QueuesModuleOptions } from '../../interfaces';
|
|
4
|
+
import { WorkflowExecutionQueuePayload } from '../../types/workflow-execution-queue.types';
|
|
5
|
+
import { MqMessageQueueService } from '../../services/mq-message-queue.service';
|
|
6
|
+
import { MqMessageService } from '../../services/mq-message.service';
|
|
7
|
+
import { RabbitMqPublisher } from '../../services/queues/rabbitmq-publisher.service';
|
|
8
|
+
import workflowExecutionQueueOptions from './workflow-execution-queue-options';
|
|
9
|
+
|
|
10
|
+
@Injectable()
|
|
11
|
+
export class WorkflowExecutionPublisherRabbitmq extends RabbitMqPublisher<WorkflowExecutionQueuePayload> {
|
|
12
|
+
constructor(
|
|
13
|
+
protected readonly mqMessageService: MqMessageService,
|
|
14
|
+
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
15
|
+
) {
|
|
16
|
+
super(mqMessageService, mqMessageQueueService);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
options(): QueuesModuleOptions {
|
|
20
|
+
return {
|
|
21
|
+
...workflowExecutionQueueOptions,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Injectable, Logger } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
import { QueueMessage } from '../../interfaces/mq';
|
|
4
|
+
import { QueuesModuleOptions } from '../../interfaces';
|
|
5
|
+
import { WorkflowExecutionQueuePayload } from '../../types/workflow-execution-queue.types';
|
|
6
|
+
import { MqMessageQueueService } from '../../services/mq-message-queue.service';
|
|
7
|
+
import { MqMessageService } from '../../services/mq-message.service';
|
|
8
|
+
import { RabbitMqSubscriber } from '../../services/queues/rabbitmq-subscriber.service';
|
|
9
|
+
import { WorkflowRuntimeService } from '../../services/workflow/workflow-runtime.service';
|
|
10
|
+
import workflowExecutionQueueOptions from './workflow-execution-queue-options';
|
|
11
|
+
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class WorkflowExecutionSubscriberRabbitmq extends RabbitMqSubscriber<WorkflowExecutionQueuePayload> {
|
|
14
|
+
private readonly workflowExecutionLogger = new Logger(WorkflowExecutionSubscriberRabbitmq.name);
|
|
15
|
+
|
|
16
|
+
constructor(
|
|
17
|
+
readonly mqMessageService: MqMessageService,
|
|
18
|
+
readonly mqMessageQueueService: MqMessageQueueService,
|
|
19
|
+
private readonly workflowRuntimeService: WorkflowRuntimeService,
|
|
20
|
+
) {
|
|
21
|
+
super(mqMessageService, mqMessageQueueService);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
options(): QueuesModuleOptions {
|
|
25
|
+
return {
|
|
26
|
+
...workflowExecutionQueueOptions,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async subscribe(message: QueueMessage<WorkflowExecutionQueuePayload>) {
|
|
31
|
+
const payload = message.payload;
|
|
32
|
+
this.workflowExecutionLogger.log(
|
|
33
|
+
`Processing queued workflow execution message ${message.messageId ?? '<unknown>'}.`,
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
if (payload.executionId !== undefined && payload.executionId !== null) {
|
|
37
|
+
return this.workflowRuntimeService.executeEnqueuedExecution(payload.executionId);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
throw new Error('Workflow execution queue payload must include executionId.');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
import { QueuesModuleOptions } from '../../interfaces';
|
|
4
|
+
import { WorkflowExecutionQueuePayload } from '../../types/workflow-execution-queue.types';
|
|
5
|
+
import { MqMessageQueueService } from '../../services/mq-message-queue.service';
|
|
6
|
+
import { MqMessageService } from '../../services/mq-message.service';
|
|
7
|
+
import { RedisPublisher } from '../../services/queues/redis-publisher.service';
|
|
8
|
+
import workflowExecutionQueueOptions from './workflow-execution-queue-options-redis';
|
|
9
|
+
|
|
10
|
+
@Injectable()
|
|
11
|
+
export class WorkflowExecutionPublisherRedis extends RedisPublisher<WorkflowExecutionQueuePayload> {
|
|
12
|
+
constructor(
|
|
13
|
+
protected readonly mqMessageService: MqMessageService,
|
|
14
|
+
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
15
|
+
) {
|
|
16
|
+
super(mqMessageService, mqMessageQueueService);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
options(): QueuesModuleOptions {
|
|
20
|
+
return {
|
|
21
|
+
...workflowExecutionQueueOptions,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Injectable, Logger } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
import { QueueMessage } from '../../interfaces/mq';
|
|
4
|
+
import { QueuesModuleOptions } from '../../interfaces';
|
|
5
|
+
import { WorkflowExecutionQueuePayload } from '../../types/workflow-execution-queue.types';
|
|
6
|
+
import { MqMessageQueueService } from '../../services/mq-message-queue.service';
|
|
7
|
+
import { MqMessageService } from '../../services/mq-message.service';
|
|
8
|
+
import { RedisSubscriber } from '../../services/queues/redis-subscriber.service';
|
|
9
|
+
import { WorkflowRuntimeService } from '../../services/workflow/workflow-runtime.service';
|
|
10
|
+
import workflowExecutionQueueOptions from './workflow-execution-queue-options-redis';
|
|
11
|
+
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class WorkflowExecutionSubscriberRedis extends RedisSubscriber<WorkflowExecutionQueuePayload> {
|
|
14
|
+
private readonly workflowExecutionLogger = new Logger(WorkflowExecutionSubscriberRedis.name);
|
|
15
|
+
|
|
16
|
+
constructor(
|
|
17
|
+
readonly mqMessageService: MqMessageService,
|
|
18
|
+
readonly mqMessageQueueService: MqMessageQueueService,
|
|
19
|
+
private readonly workflowRuntimeService: WorkflowRuntimeService,
|
|
20
|
+
) {
|
|
21
|
+
super(mqMessageService, mqMessageQueueService);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
options(): QueuesModuleOptions {
|
|
25
|
+
return {
|
|
26
|
+
...workflowExecutionQueueOptions,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async subscribe(message: QueueMessage<WorkflowExecutionQueuePayload>) {
|
|
31
|
+
const payload = message.payload;
|
|
32
|
+
this.workflowExecutionLogger.log(
|
|
33
|
+
`Processing queued workflow execution message ${message.messageId ?? '<unknown>'}.`,
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
if (payload.executionId !== undefined && payload.executionId !== null) {
|
|
37
|
+
return this.workflowRuntimeService.executeEnqueuedExecution(payload.executionId);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
throw new Error('Workflow execution queue payload must include executionId.');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
1
|
+
import { Injectable, InternalServerErrorException } from '@nestjs/common';
|
|
2
2
|
import { CreateSecurityRuleDto } from 'src/dtos/create-security-rule.dto';
|
|
3
3
|
import { SecurityRuleConfig } from 'src/dtos/security-rule-config.dto';
|
|
4
4
|
import { UpdateSecurityRuleDto } from 'src/dtos/update-security-rule.dto';
|
|
@@ -64,16 +64,37 @@ export class SecurityRuleRepository extends SolidBaseRepository<SecurityRule> {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
|
|
67
|
+
// A rule whose filters contribute no conditions is dangerous here: TypeORM renders an empty
|
|
68
|
+
// Brackets as "1=1" (always true), so such a rule would be OR'd in as "match everything" and
|
|
69
|
+
// silently void the entire security filter. Test emptiness explicitly -- {} and [] are both
|
|
70
|
+
// truthy, so the previous `if (evaluatedRule.filters)` check let them through.
|
|
71
|
+
const applicableRules = evaluatedRules.filter(rule => rule && this.hasFilterConditions(rule.filters));
|
|
72
|
+
|
|
73
|
+
if (!applicableRules.length) {
|
|
74
|
+
// We only reach here when security rules exist for this model/role (there is an early
|
|
75
|
+
// return above otherwise), so a restriction WAS intended. Fail closed and be loud:
|
|
76
|
+
// denying silently would surface as a mysteriously empty list, and allowing would be a
|
|
77
|
+
// full row-level-security bypass.
|
|
78
|
+
const message = `Security rules for model '${modelSingularName}' produced no filter conditions. `
|
|
79
|
+
+ `Check the securityRuleConfig / securityRuleConfigProvider for rules with empty filters. `
|
|
80
|
+
+ `Denying access rather than returning unrestricted results.`;
|
|
81
|
+
this.logger.error(message);
|
|
82
|
+
throw new InternalServerErrorException(message);
|
|
83
|
+
}
|
|
84
|
+
|
|
67
85
|
// Apply each security rule to the query builder. The rules are combined with OR logic at the top level.
|
|
68
|
-
qb.andWhere(new Brackets(
|
|
69
|
-
for (const evaluatedRule of
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
86
|
+
qb.andWhere(new Brackets((outerQb) => {
|
|
87
|
+
for (const evaluatedRule of applicableRules) {
|
|
88
|
+
outerQb.orWhere( // combine each rule-group with OR at the outer level
|
|
89
|
+
new Brackets((innerQb) => {
|
|
90
|
+
// NOTE: do NOT wrap this in try/catch. Field validation inside applyFilters
|
|
91
|
+
// throws on an invalid rule field, and letting it propagate aborts the
|
|
92
|
+
// request with no rows -- i.e. it fails closed. Swallowing it would leave
|
|
93
|
+
// this Brackets empty, which TypeORM renders as "1=1", turning the rule into
|
|
94
|
+
// "match everything" and voiding row-level security entirely.
|
|
95
|
+
this.crudHelperService.applyFilters(innerQb, evaluatedRule.filters, securityRuleAlias, qb); // AND within a rule
|
|
96
|
+
})
|
|
97
|
+
);
|
|
77
98
|
}
|
|
78
99
|
}));
|
|
79
100
|
|
|
@@ -84,6 +105,27 @@ export class SecurityRuleRepository extends SolidBaseRepository<SecurityRule> {
|
|
|
84
105
|
return configString.replace('$activeUserId', activeUser.sub.toString());
|
|
85
106
|
}
|
|
86
107
|
|
|
108
|
+
/**
|
|
109
|
+
* Does this filter object actually produce at least one WHERE condition?
|
|
110
|
+
*
|
|
111
|
+
* Truthiness is not enough: `{}` and `[]` are truthy but contribute nothing, and an empty
|
|
112
|
+
* Brackets is rendered by TypeORM as "1=1" -- which inside the security rules' OR chain means
|
|
113
|
+
* "match every row". Recurses through $and/$or so `{ $and: [] }` is treated as empty too.
|
|
114
|
+
*/
|
|
115
|
+
private hasFilterConditions(filters: any): boolean {
|
|
116
|
+
if (filters === null || filters === undefined) return false;
|
|
117
|
+
if (Array.isArray(filters)) return filters.some(filter => this.hasFilterConditions(filter));
|
|
118
|
+
if (typeof filters !== 'object') return false;
|
|
119
|
+
|
|
120
|
+
return Object.keys(filters).some(key => {
|
|
121
|
+
const normalizedKey = key.replace(/^\[(.*)\]$/, '$1');
|
|
122
|
+
if (normalizedKey === '$and' || normalizedKey === '$or') {
|
|
123
|
+
return this.hasFilterConditions(filters[key]);
|
|
124
|
+
}
|
|
125
|
+
return true; // any other key is a field condition
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
87
129
|
async toDto(securityRule: SecurityRule): Promise<UpdateSecurityRuleDto> {
|
|
88
130
|
// load the role and model relations for the security rule
|
|
89
131
|
let populatedSecurityRule: SecurityRule = securityRule;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { SecurityRuleRepository } from './security-rule.repository';
|
|
3
|
+
import { SolidBaseRepository } from './solid-base.repository';
|
|
4
|
+
import { RequestContextService } from 'src/services/request-context.service';
|
|
5
|
+
import { DataSource } from 'typeorm';
|
|
6
|
+
import { InjectDataSource } from '@nestjs/typeorm';
|
|
7
|
+
import { WorkflowDefinition } from '../entities/workflow-definition.entity';
|
|
8
|
+
|
|
9
|
+
@Injectable()
|
|
10
|
+
export class WorkflowDefinitionRepository extends SolidBaseRepository<WorkflowDefinition> {
|
|
11
|
+
constructor(
|
|
12
|
+
@InjectDataSource("default")
|
|
13
|
+
readonly dataSource: DataSource,
|
|
14
|
+
readonly requestContextService: RequestContextService,
|
|
15
|
+
readonly securityRuleRepository: SecurityRuleRepository,
|
|
16
|
+
) {
|
|
17
|
+
super(WorkflowDefinition, dataSource, requestContextService, securityRuleRepository);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { SecurityRuleRepository } from './security-rule.repository';
|
|
3
|
+
import { SolidBaseRepository } from './solid-base.repository';
|
|
4
|
+
import { RequestContextService } from 'src/services/request-context.service';
|
|
5
|
+
import { DataSource } from 'typeorm';
|
|
6
|
+
import { InjectDataSource } from '@nestjs/typeorm';
|
|
7
|
+
import { WorkflowExecutionArtifact } from '../entities/workflow-execution-artifact.entity';
|
|
8
|
+
|
|
9
|
+
@Injectable()
|
|
10
|
+
export class WorkflowExecutionArtifactRepository extends SolidBaseRepository<WorkflowExecutionArtifact> {
|
|
11
|
+
constructor(
|
|
12
|
+
@InjectDataSource("default")
|
|
13
|
+
readonly dataSource: DataSource,
|
|
14
|
+
readonly requestContextService: RequestContextService,
|
|
15
|
+
readonly securityRuleRepository: SecurityRuleRepository,
|
|
16
|
+
) {
|
|
17
|
+
super(WorkflowExecutionArtifact, dataSource, requestContextService, securityRuleRepository);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { SecurityRuleRepository } from './security-rule.repository';
|
|
3
|
+
import { SolidBaseRepository } from './solid-base.repository';
|
|
4
|
+
import { RequestContextService } from 'src/services/request-context.service';
|
|
5
|
+
import { DataSource } from 'typeorm';
|
|
6
|
+
import { InjectDataSource } from '@nestjs/typeorm';
|
|
7
|
+
import { WorkflowExecutionLog } from '../entities/workflow-execution-log.entity';
|
|
8
|
+
|
|
9
|
+
@Injectable()
|
|
10
|
+
export class WorkflowExecutionLogRepository extends SolidBaseRepository<WorkflowExecutionLog> {
|
|
11
|
+
constructor(
|
|
12
|
+
@InjectDataSource("default")
|
|
13
|
+
readonly dataSource: DataSource,
|
|
14
|
+
readonly requestContextService: RequestContextService,
|
|
15
|
+
readonly securityRuleRepository: SecurityRuleRepository,
|
|
16
|
+
) {
|
|
17
|
+
super(WorkflowExecutionLog, dataSource, requestContextService, securityRuleRepository);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { SecurityRuleRepository } from './security-rule.repository';
|
|
3
|
+
import { SolidBaseRepository } from './solid-base.repository';
|
|
4
|
+
import { RequestContextService } from 'src/services/request-context.service';
|
|
5
|
+
import { DataSource } from 'typeorm';
|
|
6
|
+
import { InjectDataSource } from '@nestjs/typeorm';
|
|
7
|
+
import { WorkflowExecution } from '../entities/workflow-execution.entity';
|
|
8
|
+
|
|
9
|
+
@Injectable()
|
|
10
|
+
export class WorkflowExecutionRepository extends SolidBaseRepository<WorkflowExecution> {
|
|
11
|
+
constructor(
|
|
12
|
+
@InjectDataSource("default")
|
|
13
|
+
readonly dataSource: DataSource,
|
|
14
|
+
readonly requestContextService: RequestContextService,
|
|
15
|
+
readonly securityRuleRepository: SecurityRuleRepository,
|
|
16
|
+
) {
|
|
17
|
+
super(WorkflowExecution, dataSource, requestContextService, securityRuleRepository);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { SecurityRuleRepository } from './security-rule.repository';
|
|
3
|
+
import { SolidBaseRepository } from './solid-base.repository';
|
|
4
|
+
import { RequestContextService } from 'src/services/request-context.service';
|
|
5
|
+
import { DataSource } from 'typeorm';
|
|
6
|
+
import { InjectDataSource } from '@nestjs/typeorm';
|
|
7
|
+
import { WorkflowSecret } from '../entities/workflow-secret.entity';
|
|
8
|
+
|
|
9
|
+
@Injectable()
|
|
10
|
+
export class WorkflowSecretRepository extends SolidBaseRepository<WorkflowSecret> {
|
|
11
|
+
constructor(
|
|
12
|
+
@InjectDataSource("default")
|
|
13
|
+
readonly dataSource: DataSource,
|
|
14
|
+
readonly requestContextService: RequestContextService,
|
|
15
|
+
readonly securityRuleRepository: SecurityRuleRepository,
|
|
16
|
+
) {
|
|
17
|
+
super(WorkflowSecret, dataSource, requestContextService, securityRuleRepository);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { SecurityRuleRepository } from './security-rule.repository';
|
|
3
|
+
import { SolidBaseRepository } from './solid-base.repository';
|
|
4
|
+
import { RequestContextService } from 'src/services/request-context.service';
|
|
5
|
+
import { DataSource } from 'typeorm';
|
|
6
|
+
import { InjectDataSource } from '@nestjs/typeorm';
|
|
7
|
+
import { WorkflowStepExecution } from '../entities/workflow-step-execution.entity';
|
|
8
|
+
|
|
9
|
+
@Injectable()
|
|
10
|
+
export class WorkflowStepExecutionRepository extends SolidBaseRepository<WorkflowStepExecution> {
|
|
11
|
+
constructor(
|
|
12
|
+
@InjectDataSource("default")
|
|
13
|
+
readonly dataSource: DataSource,
|
|
14
|
+
readonly requestContextService: RequestContextService,
|
|
15
|
+
readonly securityRuleRepository: SecurityRuleRepository,
|
|
16
|
+
) {
|
|
17
|
+
super(WorkflowStepExecution, dataSource, requestContextService, securityRuleRepository);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { SecurityRuleRepository } from './security-rule.repository';
|
|
3
|
+
import { SolidBaseRepository } from './solid-base.repository';
|
|
4
|
+
import { RequestContextService } from 'src/services/request-context.service';
|
|
5
|
+
import { DataSource } from 'typeorm';
|
|
6
|
+
import { InjectDataSource } from '@nestjs/typeorm';
|
|
7
|
+
import { WorkflowTriggerExecution } from '../entities/workflow-trigger-execution.entity';
|
|
8
|
+
|
|
9
|
+
@Injectable()
|
|
10
|
+
export class WorkflowTriggerExecutionRepository extends SolidBaseRepository<WorkflowTriggerExecution> {
|
|
11
|
+
constructor(
|
|
12
|
+
@InjectDataSource("default")
|
|
13
|
+
readonly dataSource: DataSource,
|
|
14
|
+
readonly requestContextService: RequestContextService,
|
|
15
|
+
readonly securityRuleRepository: SecurityRuleRepository,
|
|
16
|
+
) {
|
|
17
|
+
super(WorkflowTriggerExecution, dataSource, requestContextService, securityRuleRepository);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -3,6 +3,7 @@ import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as os from 'os';
|
|
5
5
|
import * as path from 'path';
|
|
6
|
+
import { createHash } from 'crypto';
|
|
6
7
|
import { v4 as uuidv4 } from 'uuid';
|
|
7
8
|
|
|
8
9
|
import { CreateEmailTemplateDto } from 'src/dtos/create-email-template.dto';
|
|
@@ -66,6 +67,7 @@ import { FieldMetadata } from 'src/entities/field-metadata.entity';
|
|
|
66
67
|
import { ModelMetadata } from 'src/entities/model-metadata.entity';
|
|
67
68
|
import { PermissionMetadata } from 'src/entities/permission-metadata.entity';
|
|
68
69
|
import { ViewMetadata } from 'src/entities/view-metadata.entity';
|
|
70
|
+
import { WorkflowDefinition } from 'src/entities/workflow-definition.entity';
|
|
69
71
|
import { EventDetails, EventType, ModuleMetadataSeederEventPayload } from 'src/interfaces';
|
|
70
72
|
|
|
71
73
|
/**
|
|
@@ -236,10 +238,15 @@ export class ModuleMetadataSeederService {
|
|
|
236
238
|
const moduleModelFieldCounts = await this.timeOperation('seed-module-model-fields', () => this.seedModuleModelFields(moduleMetadata), { moduleName: moduleMetadata.name, component: 'module-model-fields' });
|
|
237
239
|
console.log(`${this.formatSeedResult(moduleMetadata.name, 'Module/Model/Fields', moduleModelFieldCounts)}`);
|
|
238
240
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
241
|
+
currentStep = 'seedWorkflowDefinitions';
|
|
242
|
+
this.logger.log(`Seeding Workflow Definitions`);
|
|
243
|
+
const workflowDefinitionCounts = await this.timeOperation('seed-workflow-definitions', () => this.seedWorkflowDefinitions(moduleMetadata, overallMetadata), { moduleName: moduleMetadata.name, component: 'workflow-definitions' });
|
|
244
|
+
console.log(`${this.formatSeedResult(moduleMetadata.name, 'Workflow Definitions', workflowDefinitionCounts)}`);
|
|
245
|
+
|
|
246
|
+
currentStep = 'seedLocales';
|
|
247
|
+
this.logger.log(`Seeding Locales`);
|
|
248
|
+
const localeCounts = await this.seedLocales(overallMetadata);
|
|
249
|
+
console.log(`${this.formatSeedResult(moduleMetadata.name, 'Locales', localeCounts)}`);
|
|
243
250
|
|
|
244
251
|
currentStep = 'seedPermissions';
|
|
245
252
|
this.logger.log(`Seeding Permissions`);
|
|
@@ -550,6 +557,28 @@ export class ModuleMetadataSeederService {
|
|
|
550
557
|
return { pruned, upserted: savedFilters.length };
|
|
551
558
|
}
|
|
552
559
|
|
|
560
|
+
private async seedWorkflowDefinitions(moduleMetadata: CreateModuleMetadataDto, overallMetadata: any): Promise<{ pruned: number; upserted: number }> {
|
|
561
|
+
const workflowDefinitions = this.getSeedArray<any>(overallMetadata?.workflowDefinitions)
|
|
562
|
+
.map((definition) => ({
|
|
563
|
+
...definition,
|
|
564
|
+
moduleUserKey: definition.moduleUserKey ?? moduleMetadata.name,
|
|
565
|
+
definitionYaml: this.resolveSeedFileBackedWorkflowDefinitionYaml(definition.definitionYaml, overallMetadata?.__seedFilePath),
|
|
566
|
+
}));
|
|
567
|
+
const pruned = this.enablePruning ? await this.timeOperation('prune-workflow-definitions', () => this.pruneWorkflowDefinitions(workflowDefinitions, moduleMetadata.name), {
|
|
568
|
+
moduleName: moduleMetadata.name,
|
|
569
|
+
component: 'workflow-definitions',
|
|
570
|
+
serviceCall: 'pruneWorkflowDefinitions',
|
|
571
|
+
}) : 0;
|
|
572
|
+
if (workflowDefinitions.length > 0) {
|
|
573
|
+
await this.timeOperation('handle-workflow-definitions', () => this.handleSeedWorkflowDefinitions(workflowDefinitions), {
|
|
574
|
+
moduleName: moduleMetadata.name,
|
|
575
|
+
component: 'workflow-definitions',
|
|
576
|
+
serviceCall: 'handleSeedWorkflowDefinitions',
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
return { pruned, upserted: workflowDefinitions.length };
|
|
580
|
+
}
|
|
581
|
+
|
|
553
582
|
private async seedListOfValues(moduleMetadata: CreateModuleMetadataDto, overallMetadata: any): Promise<{ pruned: number; upserted: number }> {
|
|
554
583
|
const listOfValues = this.getSeedArray<CreateListOfValuesDto>(overallMetadata?.listOfValues);
|
|
555
584
|
const pruned = this.enablePruning ? await this.timeOperation('prune-list-of-values', () => this.pruneListOfValues(listOfValues, moduleMetadata.name), {
|
|
@@ -785,6 +814,7 @@ export class ModuleMetadataSeederService {
|
|
|
785
814
|
|
|
786
815
|
if (fs.existsSync(fullPath)) {
|
|
787
816
|
const overallMetadata = JSON.parse(fs.readFileSync(fullPath, 'utf-8'));
|
|
817
|
+
overallMetadata.__seedFilePath = fullPath;
|
|
788
818
|
seedDataFiles.push(overallMetadata);
|
|
789
819
|
}
|
|
790
820
|
}
|
|
@@ -792,6 +822,28 @@ export class ModuleMetadataSeederService {
|
|
|
792
822
|
return seedDataFiles;
|
|
793
823
|
}
|
|
794
824
|
|
|
825
|
+
private resolveSeedFileBackedWorkflowDefinitionYaml(definitionYaml: string, seedFilePath?: string): string {
|
|
826
|
+
if (typeof definitionYaml !== 'string' || !definitionYaml.startsWith('file:')) {
|
|
827
|
+
return definitionYaml;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
if (!seedFilePath) {
|
|
831
|
+
throw new Error(`Cannot resolve workflow definition YAML file reference "${definitionYaml}" because the seed file path is unavailable.`);
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
const relativePath = definitionYaml.slice('file:'.length).trim();
|
|
835
|
+
if (!relativePath) {
|
|
836
|
+
throw new Error(`Cannot resolve workflow definition YAML file reference "${definitionYaml}" because no relative path was provided.`);
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
const resolvedPath = path.resolve(path.dirname(seedFilePath), relativePath);
|
|
840
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
841
|
+
throw new Error(`Workflow definition YAML file "${resolvedPath}" referenced from "${seedFilePath}" does not exist.`);
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
return fs.readFileSync(resolvedPath, 'utf-8');
|
|
845
|
+
}
|
|
846
|
+
|
|
795
847
|
// OK
|
|
796
848
|
private async seedGlobalMetadata() {
|
|
797
849
|
this.logger.log(`Seeding Permissions`);
|
|
@@ -2147,6 +2199,52 @@ export class ModuleMetadataSeederService {
|
|
|
2147
2199
|
}
|
|
2148
2200
|
}
|
|
2149
2201
|
|
|
2202
|
+
private async handleSeedWorkflowDefinitions(workflowDefinitions: any[]) {
|
|
2203
|
+
if (!workflowDefinitions || workflowDefinitions.length === 0) {
|
|
2204
|
+
this.logger.debug(`No workflow definitions found to seed`);
|
|
2205
|
+
return;
|
|
2206
|
+
}
|
|
2207
|
+
|
|
2208
|
+
const repo = this.dataSource.getRepository(WorkflowDefinition);
|
|
2209
|
+
for (const definition of workflowDefinitions) {
|
|
2210
|
+
const moduleMetadata = await this.getModuleByUserKeyCached(definition.moduleUserKey, {
|
|
2211
|
+
moduleName: definition.moduleUserKey,
|
|
2212
|
+
component: 'workflow-definitions',
|
|
2213
|
+
details: `module=${definition.moduleUserKey}`,
|
|
2214
|
+
});
|
|
2215
|
+
|
|
2216
|
+
if (!moduleMetadata) {
|
|
2217
|
+
throw new Error(`Cannot seed workflow definition "${definition.key}": module metadata "${definition.moduleUserKey}" was not found.`);
|
|
2218
|
+
}
|
|
2219
|
+
|
|
2220
|
+
const existing = await repo.findOne({
|
|
2221
|
+
where: {
|
|
2222
|
+
key: definition.key,
|
|
2223
|
+
} as any,
|
|
2224
|
+
});
|
|
2225
|
+
const payload = repo.create({
|
|
2226
|
+
...existing,
|
|
2227
|
+
key: definition.key,
|
|
2228
|
+
moduleMetadata,
|
|
2229
|
+
displayName: definition.displayName,
|
|
2230
|
+
namespace: definition.namespace,
|
|
2231
|
+
description: definition.description,
|
|
2232
|
+
status: definition.status ?? 'active',
|
|
2233
|
+
definitionVersion: definition.definitionVersion,
|
|
2234
|
+
definitionChecksum: this.workflowDefinitionChecksum(definition.definitionYaml),
|
|
2235
|
+
definitionYaml: definition.definitionYaml,
|
|
2236
|
+
tags: definition.tags,
|
|
2237
|
+
});
|
|
2238
|
+
|
|
2239
|
+
await this.timeOperation('workflow-definition-save', () => repo.save(payload), {
|
|
2240
|
+
moduleName: definition.moduleUserKey,
|
|
2241
|
+
component: 'workflow-definitions',
|
|
2242
|
+
serviceCall: 'workflowDefinitionRepository.save',
|
|
2243
|
+
details: `workflow=${definition.key}`,
|
|
2244
|
+
});
|
|
2245
|
+
}
|
|
2246
|
+
}
|
|
2247
|
+
|
|
2150
2248
|
private async handleSeedLocales(localesDto: CreateLocaleDto[]) {
|
|
2151
2249
|
if (!localesDto || localesDto.length === 0) {
|
|
2152
2250
|
this.logger.debug(`No locales found to seed`);
|
|
@@ -2396,6 +2494,49 @@ export class ModuleMetadataSeederService {
|
|
|
2396
2494
|
return 0;
|
|
2397
2495
|
}
|
|
2398
2496
|
|
|
2497
|
+
private async pruneWorkflowDefinitions(workflowDefinitionsDto: any[] | undefined, moduleName?: string): Promise<number> {
|
|
2498
|
+
if (!moduleName) {
|
|
2499
|
+
this.logger.warn(`Skipping workflow definition prune: missing module name in metadata.`);
|
|
2500
|
+
return 0;
|
|
2501
|
+
}
|
|
2502
|
+
const workflowDefinitions = workflowDefinitionsDto ?? [];
|
|
2503
|
+
|
|
2504
|
+
const module = await this.getModuleByUserKeyCached(moduleName, {
|
|
2505
|
+
moduleName,
|
|
2506
|
+
component: 'workflow-definitions',
|
|
2507
|
+
details: `module=${moduleName}`,
|
|
2508
|
+
});
|
|
2509
|
+
if (!module) {
|
|
2510
|
+
this.logger.warn(`Skipping workflow definition prune: module not found for ${moduleName}.`);
|
|
2511
|
+
return 0;
|
|
2512
|
+
}
|
|
2513
|
+
|
|
2514
|
+
const workflowKeys = [...new Set(workflowDefinitions.map(dto => dto.key).filter(Boolean))];
|
|
2515
|
+
const repo = this.dataSource.getRepository(WorkflowDefinition);
|
|
2516
|
+
const idsToDeleteQuery = repo
|
|
2517
|
+
.createQueryBuilder('workflowDefinition')
|
|
2518
|
+
.select('workflowDefinition.id', 'id')
|
|
2519
|
+
.innerJoin('workflowDefinition.moduleMetadata', 'moduleMetadata')
|
|
2520
|
+
.where('moduleMetadata.id = :moduleId', { moduleId: module.id });
|
|
2521
|
+
|
|
2522
|
+
if (workflowKeys.length > 0) {
|
|
2523
|
+
idsToDeleteQuery.andWhere('workflowDefinition.key NOT IN (:...workflowKeys)', { workflowKeys });
|
|
2524
|
+
}
|
|
2525
|
+
|
|
2526
|
+
const rows = await idsToDeleteQuery.getRawMany();
|
|
2527
|
+
const ids = rows.map((row) => row.id);
|
|
2528
|
+
if (ids.length > 0) {
|
|
2529
|
+
const result = await repo
|
|
2530
|
+
.createQueryBuilder()
|
|
2531
|
+
.delete()
|
|
2532
|
+
.from(WorkflowDefinition)
|
|
2533
|
+
.whereInIds(ids)
|
|
2534
|
+
.execute();
|
|
2535
|
+
return result.affected ?? 0;
|
|
2536
|
+
}
|
|
2537
|
+
return 0;
|
|
2538
|
+
}
|
|
2539
|
+
|
|
2399
2540
|
private async pruneListOfValues(listOfValuesDto: CreateListOfValuesDto[] | undefined, moduleName?: string): Promise<number> {
|
|
2400
2541
|
if (!moduleName) {
|
|
2401
2542
|
this.logger.warn(`Skipping list of values prune: missing module name in metadata.`);
|
|
@@ -2824,4 +2965,25 @@ export class ModuleMetadataSeederService {
|
|
|
2824
2965
|
return `✔ [${moduleName}] ${label} seeded (upserted ${counts.upserted})`;
|
|
2825
2966
|
}
|
|
2826
2967
|
|
|
2968
|
+
private workflowDefinitionChecksum(value: any): string {
|
|
2969
|
+
return createHash('sha256')
|
|
2970
|
+
.update(typeof value === 'string' ? value : this.stableStringify(value))
|
|
2971
|
+
.digest('hex');
|
|
2972
|
+
}
|
|
2973
|
+
|
|
2974
|
+
private stableStringify(value: any): string {
|
|
2975
|
+
if (Array.isArray(value)) {
|
|
2976
|
+
return `[${value.map((entry) => this.stableStringify(entry)).join(',')}]`;
|
|
2977
|
+
}
|
|
2978
|
+
|
|
2979
|
+
if (value && typeof value === 'object') {
|
|
2980
|
+
return `{${Object.keys(value)
|
|
2981
|
+
.sort()
|
|
2982
|
+
.map((key) => `${JSON.stringify(key)}:${this.stableStringify(value[key])}`)
|
|
2983
|
+
.join(',')}}`;
|
|
2984
|
+
}
|
|
2985
|
+
|
|
2986
|
+
return JSON.stringify(value);
|
|
2987
|
+
}
|
|
2988
|
+
|
|
2827
2989
|
}
|