codika 3.0.0
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/LICENSE +21 -0
- package/README.md +68 -0
- package/dist/cli/commands/completion.d.ts +15 -0
- package/dist/cli/commands/completion.d.ts.map +1 -0
- package/dist/cli/commands/completion.js +810 -0
- package/dist/cli/commands/completion.js.map +1 -0
- package/dist/cli/commands/config/clear.d.ts +12 -0
- package/dist/cli/commands/config/clear.d.ts.map +1 -0
- package/dist/cli/commands/config/clear.js +35 -0
- package/dist/cli/commands/config/clear.js.map +1 -0
- package/dist/cli/commands/config/index.d.ts +15 -0
- package/dist/cli/commands/config/index.d.ts.map +1 -0
- package/dist/cli/commands/config/index.js +21 -0
- package/dist/cli/commands/config/index.js.map +1 -0
- package/dist/cli/commands/config/set.d.ts +41 -0
- package/dist/cli/commands/config/set.d.ts.map +1 -0
- package/dist/cli/commands/config/set.js +185 -0
- package/dist/cli/commands/config/set.js.map +1 -0
- package/dist/cli/commands/config/show.d.ts +12 -0
- package/dist/cli/commands/config/show.d.ts.map +1 -0
- package/dist/cli/commands/config/show.js +45 -0
- package/dist/cli/commands/config/show.js.map +1 -0
- package/dist/cli/commands/deploy/documents.d.ts +12 -0
- package/dist/cli/commands/deploy/documents.d.ts.map +1 -0
- package/dist/cli/commands/deploy/documents.js +217 -0
- package/dist/cli/commands/deploy/documents.js.map +1 -0
- package/dist/cli/commands/deploy/index.d.ts +14 -0
- package/dist/cli/commands/deploy/index.d.ts.map +1 -0
- package/dist/cli/commands/deploy/index.js +21 -0
- package/dist/cli/commands/deploy/index.js.map +1 -0
- package/dist/cli/commands/deploy/process-data-ingestion.d.ts +13 -0
- package/dist/cli/commands/deploy/process-data-ingestion.d.ts.map +1 -0
- package/dist/cli/commands/deploy/process-data-ingestion.js +226 -0
- package/dist/cli/commands/deploy/process-data-ingestion.js.map +1 -0
- package/dist/cli/commands/deploy/use-case.d.ts +9 -0
- package/dist/cli/commands/deploy/use-case.d.ts.map +1 -0
- package/dist/cli/commands/deploy/use-case.js +212 -0
- package/dist/cli/commands/deploy/use-case.js.map +1 -0
- package/dist/cli/commands/get/execution.d.ts +9 -0
- package/dist/cli/commands/get/execution.d.ts.map +1 -0
- package/dist/cli/commands/get/execution.js +159 -0
- package/dist/cli/commands/get/execution.js.map +1 -0
- package/dist/cli/commands/get/index.d.ts +13 -0
- package/dist/cli/commands/get/index.d.ts.map +1 -0
- package/dist/cli/commands/get/index.js +20 -0
- package/dist/cli/commands/get/index.js.map +1 -0
- package/dist/cli/commands/get/skills.d.ts +15 -0
- package/dist/cli/commands/get/skills.d.ts.map +1 -0
- package/dist/cli/commands/get/skills.js +135 -0
- package/dist/cli/commands/get/skills.js.map +1 -0
- package/dist/cli/commands/get/use-case.d.ts +9 -0
- package/dist/cli/commands/get/use-case.d.ts.map +1 -0
- package/dist/cli/commands/get/use-case.js +186 -0
- package/dist/cli/commands/get/use-case.js.map +1 -0
- package/dist/cli/commands/init.d.ts +14 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +347 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/integration/delete.d.ts +13 -0
- package/dist/cli/commands/integration/delete.d.ts.map +1 -0
- package/dist/cli/commands/integration/delete.js +140 -0
- package/dist/cli/commands/integration/delete.js.map +1 -0
- package/dist/cli/commands/integration/index.d.ts +13 -0
- package/dist/cli/commands/integration/index.d.ts.map +1 -0
- package/dist/cli/commands/integration/index.js +20 -0
- package/dist/cli/commands/integration/index.js.map +1 -0
- package/dist/cli/commands/integration/list.d.ts +13 -0
- package/dist/cli/commands/integration/list.d.ts.map +1 -0
- package/dist/cli/commands/integration/list.js +129 -0
- package/dist/cli/commands/integration/list.js.map +1 -0
- package/dist/cli/commands/integration/set.d.ts +13 -0
- package/dist/cli/commands/integration/set.d.ts.map +1 -0
- package/dist/cli/commands/integration/set.js +253 -0
- package/dist/cli/commands/integration/set.js.map +1 -0
- package/dist/cli/commands/list/executions.d.ts +12 -0
- package/dist/cli/commands/list/executions.d.ts.map +1 -0
- package/dist/cli/commands/list/executions.js +168 -0
- package/dist/cli/commands/list/executions.js.map +1 -0
- package/dist/cli/commands/list/index.d.ts +11 -0
- package/dist/cli/commands/list/index.d.ts.map +1 -0
- package/dist/cli/commands/list/index.js +14 -0
- package/dist/cli/commands/list/index.js.map +1 -0
- package/dist/cli/commands/logout.d.ts +12 -0
- package/dist/cli/commands/logout.d.ts.map +1 -0
- package/dist/cli/commands/logout.js +58 -0
- package/dist/cli/commands/logout.js.map +1 -0
- package/dist/cli/commands/project/create.d.ts +8 -0
- package/dist/cli/commands/project/create.d.ts.map +1 -0
- package/dist/cli/commands/project/create.js +109 -0
- package/dist/cli/commands/project/create.js.map +1 -0
- package/dist/cli/commands/project/index.d.ts +12 -0
- package/dist/cli/commands/project/index.d.ts.map +1 -0
- package/dist/cli/commands/project/index.js +15 -0
- package/dist/cli/commands/project/index.js.map +1 -0
- package/dist/cli/commands/publish.d.ts +12 -0
- package/dist/cli/commands/publish.d.ts.map +1 -0
- package/dist/cli/commands/publish.js +152 -0
- package/dist/cli/commands/publish.js.map +1 -0
- package/dist/cli/commands/redeploy.d.ts +11 -0
- package/dist/cli/commands/redeploy.d.ts.map +1 -0
- package/dist/cli/commands/redeploy.js +166 -0
- package/dist/cli/commands/redeploy.js.map +1 -0
- package/dist/cli/commands/status.d.ts +63 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +290 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/trigger.d.ts +8 -0
- package/dist/cli/commands/trigger.d.ts.map +1 -0
- package/dist/cli/commands/trigger.js +247 -0
- package/dist/cli/commands/trigger.js.map +1 -0
- package/dist/cli/commands/use.d.ts +13 -0
- package/dist/cli/commands/use.d.ts.map +1 -0
- package/dist/cli/commands/use.js +92 -0
- package/dist/cli/commands/use.js.map +1 -0
- package/dist/cli/commands/verify/index.d.ts +13 -0
- package/dist/cli/commands/verify/index.d.ts.map +1 -0
- package/dist/cli/commands/verify/index.js +18 -0
- package/dist/cli/commands/verify/index.js.map +1 -0
- package/dist/cli/commands/verify/use-case.d.ts +23 -0
- package/dist/cli/commands/verify/use-case.d.ts.map +1 -0
- package/dist/cli/commands/verify/use-case.js +94 -0
- package/dist/cli/commands/verify/use-case.js.map +1 -0
- package/dist/cli/commands/verify/workflow.d.ts +22 -0
- package/dist/cli/commands/verify/workflow.d.ts.map +1 -0
- package/dist/cli/commands/verify/workflow.js +82 -0
- package/dist/cli/commands/verify/workflow.js.map +1 -0
- package/dist/cli/commands/whoami.d.ts +13 -0
- package/dist/cli/commands/whoami.d.ts.map +1 -0
- package/dist/cli/commands/whoami.js +126 -0
- package/dist/cli/commands/whoami.js.map +1 -0
- package/dist/cli/index.d.ts +24 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +90 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/templates/claude-md-template.d.ts +12 -0
- package/dist/cli/templates/claude-md-template.d.ts.map +1 -0
- package/dist/cli/templates/claude-md-template.js +162 -0
- package/dist/cli/templates/claude-md-template.js.map +1 -0
- package/dist/cli/templates/config-template.d.ts +18 -0
- package/dist/cli/templates/config-template.d.ts.map +1 -0
- package/dist/cli/templates/config-template.js +350 -0
- package/dist/cli/templates/config-template.js.map +1 -0
- package/dist/cli/templates/skill-templates.d.ts +24 -0
- package/dist/cli/templates/skill-templates.d.ts.map +1 -0
- package/dist/cli/templates/skill-templates.js +117 -0
- package/dist/cli/templates/skill-templates.js.map +1 -0
- package/dist/cli/templates/slug.d.ts +9 -0
- package/dist/cli/templates/slug.d.ts.map +1 -0
- package/dist/cli/templates/slug.js +17 -0
- package/dist/cli/templates/slug.js.map +1 -0
- package/dist/cli/templates/workflow-templates.d.ts +693 -0
- package/dist/cli/templates/workflow-templates.d.ts.map +1 -0
- package/dist/cli/templates/workflow-templates.js +516 -0
- package/dist/cli/templates/workflow-templates.js.map +1 -0
- package/dist/cli/utils/output.d.ts +65 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +188 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/cli/utils/validation-output.d.ts +21 -0
- package/dist/cli/utils/validation-output.d.ts.map +1 -0
- package/dist/cli/utils/validation-output.js +204 -0
- package/dist/cli/utils/validation-output.js.map +1 -0
- package/dist/data/integration-fields.d.ts +27 -0
- package/dist/data/integration-fields.d.ts.map +1 -0
- package/dist/data/integration-fields.js +361 -0
- package/dist/data/integration-fields.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/types/process-types.d.ts +740 -0
- package/dist/types/process-types.d.ts.map +1 -0
- package/dist/types/process-types.js +22 -0
- package/dist/types/process-types.js.map +1 -0
- package/dist/utils/config.d.ts +127 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +315 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/data-ingestion-deploy-client.d.ts +53 -0
- package/dist/utils/data-ingestion-deploy-client.d.ts.map +1 -0
- package/dist/utils/data-ingestion-deploy-client.js +63 -0
- package/dist/utils/data-ingestion-deploy-client.js.map +1 -0
- package/dist/utils/data-ingestion-deployer.d.ts +78 -0
- package/dist/utils/data-ingestion-deployer.d.ts.map +1 -0
- package/dist/utils/data-ingestion-deployer.js +119 -0
- package/dist/utils/data-ingestion-deployer.js.map +1 -0
- package/dist/utils/deploy-client.d.ts +55 -0
- package/dist/utils/deploy-client.d.ts.map +1 -0
- package/dist/utils/deploy-client.js +73 -0
- package/dist/utils/deploy-client.js.map +1 -0
- package/dist/utils/deployment-archiver.d.ts +110 -0
- package/dist/utils/deployment-archiver.d.ts.map +1 -0
- package/dist/utils/deployment-archiver.js +158 -0
- package/dist/utils/deployment-archiver.js.map +1 -0
- package/dist/utils/document-deploy-client.d.ts +41 -0
- package/dist/utils/document-deploy-client.d.ts.map +1 -0
- package/dist/utils/document-deploy-client.js +46 -0
- package/dist/utils/document-deploy-client.js.map +1 -0
- package/dist/utils/encryption.d.ts +85 -0
- package/dist/utils/encryption.d.ts.map +1 -0
- package/dist/utils/encryption.js +162 -0
- package/dist/utils/encryption.js.map +1 -0
- package/dist/utils/execution-client.d.ts +71 -0
- package/dist/utils/execution-client.d.ts.map +1 -0
- package/dist/utils/execution-client.js +56 -0
- package/dist/utils/execution-client.js.map +1 -0
- package/dist/utils/integration-client.d.ts +134 -0
- package/dist/utils/integration-client.d.ts.map +1 -0
- package/dist/utils/integration-client.js +109 -0
- package/dist/utils/integration-client.js.map +1 -0
- package/dist/utils/list-executions-client.d.ts +47 -0
- package/dist/utils/list-executions-client.d.ts.map +1 -0
- package/dist/utils/list-executions-client.js +50 -0
- package/dist/utils/list-executions-client.js.map +1 -0
- package/dist/utils/metadata-client.d.ts +90 -0
- package/dist/utils/metadata-client.d.ts.map +1 -0
- package/dist/utils/metadata-client.js +66 -0
- package/dist/utils/metadata-client.js.map +1 -0
- package/dist/utils/project-client.d.ts +70 -0
- package/dist/utils/project-client.d.ts.map +1 -0
- package/dist/utils/project-client.js +63 -0
- package/dist/utils/project-client.js.map +1 -0
- package/dist/utils/project-json.d.ts +71 -0
- package/dist/utils/project-json.d.ts.map +1 -0
- package/dist/utils/project-json.js +129 -0
- package/dist/utils/project-json.js.map +1 -0
- package/dist/utils/publish-client.d.ts +53 -0
- package/dist/utils/publish-client.d.ts.map +1 -0
- package/dist/utils/publish-client.js +64 -0
- package/dist/utils/publish-client.js.map +1 -0
- package/dist/utils/redeploy-client.d.ts +39 -0
- package/dist/utils/redeploy-client.d.ts.map +1 -0
- package/dist/utils/redeploy-client.js +51 -0
- package/dist/utils/redeploy-client.js.map +1 -0
- package/dist/utils/skill-parser.d.ts +52 -0
- package/dist/utils/skill-parser.d.ts.map +1 -0
- package/dist/utils/skill-parser.js +127 -0
- package/dist/utils/skill-parser.js.map +1 -0
- package/dist/utils/skills-client.d.ts +39 -0
- package/dist/utils/skills-client.d.ts.map +1 -0
- package/dist/utils/skills-client.js +32 -0
- package/dist/utils/skills-client.js.map +1 -0
- package/dist/utils/trigger-client.d.ts +78 -0
- package/dist/utils/trigger-client.d.ts.map +1 -0
- package/dist/utils/trigger-client.js +81 -0
- package/dist/utils/trigger-client.js.map +1 -0
- package/dist/utils/use-case-deployer.d.ts +93 -0
- package/dist/utils/use-case-deployer.d.ts.map +1 -0
- package/dist/utils/use-case-deployer.js +270 -0
- package/dist/utils/use-case-deployer.js.map +1 -0
- package/dist/utils/version-manager.d.ts +63 -0
- package/dist/utils/version-manager.d.ts.map +1 -0
- package/dist/utils/version-manager.js +91 -0
- package/dist/utils/version-manager.js.map +1 -0
- package/dist/utils/workflow-encoding.d.ts +26 -0
- package/dist/utils/workflow-encoding.d.ts.map +1 -0
- package/dist/utils/workflow-encoding.js +41 -0
- package/dist/utils/workflow-encoding.js.map +1 -0
- package/dist/validation/fixer.d.ts +56 -0
- package/dist/validation/fixer.d.ts.map +1 -0
- package/dist/validation/fixer.js +168 -0
- package/dist/validation/fixer.js.map +1 -0
- package/dist/validation/rules/codika-init-required.d.ts +18 -0
- package/dist/validation/rules/codika-init-required.d.ts.map +1 -0
- package/dist/validation/rules/codika-init-required.js +70 -0
- package/dist/validation/rules/codika-init-required.js.map +1 -0
- package/dist/validation/rules/codika-submit-result.d.ts +22 -0
- package/dist/validation/rules/codika-submit-result.d.ts.map +1 -0
- package/dist/validation/rules/codika-submit-result.js +144 -0
- package/dist/validation/rules/codika-submit-result.js.map +1 -0
- package/dist/validation/rules/error-branch-required.d.ts +24 -0
- package/dist/validation/rules/error-branch-required.d.ts.map +1 -0
- package/dist/validation/rules/error-branch-required.js +103 -0
- package/dist/validation/rules/error-branch-required.js.map +1 -0
- package/dist/validation/rules/index.d.ts +18 -0
- package/dist/validation/rules/index.d.ts.map +1 -0
- package/dist/validation/rules/index.js +28 -0
- package/dist/validation/rules/index.js.map +1 -0
- package/dist/validation/rules/schedule-webhook-convergence.d.ts +24 -0
- package/dist/validation/rules/schedule-webhook-convergence.d.ts.map +1 -0
- package/dist/validation/rules/schedule-webhook-convergence.js +129 -0
- package/dist/validation/rules/schedule-webhook-convergence.js.map +1 -0
- package/dist/validation/rules/subworkflow-min-params.d.ts +21 -0
- package/dist/validation/rules/subworkflow-min-params.d.ts.map +1 -0
- package/dist/validation/rules/subworkflow-min-params.js +84 -0
- package/dist/validation/rules/subworkflow-min-params.js.map +1 -0
- package/dist/validation/runner.d.ts +43 -0
- package/dist/validation/runner.d.ts.map +1 -0
- package/dist/validation/runner.js +335 -0
- package/dist/validation/runner.js.map +1 -0
- package/dist/validation/types.d.ts +155 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +8 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation/use-case-scripts/calledby-consistency.d.ts +23 -0
- package/dist/validation/use-case-scripts/calledby-consistency.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/calledby-consistency.js +236 -0
- package/dist/validation/use-case-scripts/calledby-consistency.js.map +1 -0
- package/dist/validation/use-case-scripts/config-exports.d.ts +17 -0
- package/dist/validation/use-case-scripts/config-exports.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/config-exports.js +93 -0
- package/dist/validation/use-case-scripts/config-exports.js.map +1 -0
- package/dist/validation/use-case-scripts/custom-integration-schema.d.ts +21 -0
- package/dist/validation/use-case-scripts/custom-integration-schema.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/custom-integration-schema.js +378 -0
- package/dist/validation/use-case-scripts/custom-integration-schema.js.map +1 -0
- package/dist/validation/use-case-scripts/index.d.ts +27 -0
- package/dist/validation/use-case-scripts/index.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/index.js +52 -0
- package/dist/validation/use-case-scripts/index.js.map +1 -0
- package/dist/validation/use-case-scripts/integration-inheritance.d.ts +35 -0
- package/dist/validation/use-case-scripts/integration-inheritance.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/integration-inheritance.js +348 -0
- package/dist/validation/use-case-scripts/integration-inheritance.js.map +1 -0
- package/dist/validation/use-case-scripts/schema-types.d.ts +21 -0
- package/dist/validation/use-case-scripts/schema-types.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/schema-types.js +134 -0
- package/dist/validation/use-case-scripts/schema-types.js.map +1 -0
- package/dist/validation/use-case-scripts/skill-consistency.d.ts +21 -0
- package/dist/validation/use-case-scripts/skill-consistency.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/skill-consistency.js +180 -0
- package/dist/validation/use-case-scripts/skill-consistency.js.map +1 -0
- package/dist/validation/use-case-scripts/subworkflow-references.d.ts +22 -0
- package/dist/validation/use-case-scripts/subworkflow-references.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/subworkflow-references.js +139 -0
- package/dist/validation/use-case-scripts/subworkflow-references.js.map +1 -0
- package/dist/validation/use-case-scripts/trigger-type-consistency.d.ts +25 -0
- package/dist/validation/use-case-scripts/trigger-type-consistency.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/trigger-type-consistency.js +265 -0
- package/dist/validation/use-case-scripts/trigger-type-consistency.js.map +1 -0
- package/dist/validation/use-case-scripts/trigger-types.d.ts +20 -0
- package/dist/validation/use-case-scripts/trigger-types.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/trigger-types.js +177 -0
- package/dist/validation/use-case-scripts/trigger-types.js.map +1 -0
- package/dist/validation/use-case-scripts/triggers-required.d.ts +23 -0
- package/dist/validation/use-case-scripts/triggers-required.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/triggers-required.js +111 -0
- package/dist/validation/use-case-scripts/triggers-required.js.map +1 -0
- package/dist/validation/use-case-scripts/webhook-path-consistency.d.ts +28 -0
- package/dist/validation/use-case-scripts/webhook-path-consistency.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/webhook-path-consistency.js +288 -0
- package/dist/validation/use-case-scripts/webhook-path-consistency.js.map +1 -0
- package/dist/validation/use-case-scripts/workflow-imports.d.ts +16 -0
- package/dist/validation/use-case-scripts/workflow-imports.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/workflow-imports.js +206 -0
- package/dist/validation/use-case-scripts/workflow-imports.js.map +1 -0
- package/dist/validation/workflow-scripts/credential-placeholders.d.ts +21 -0
- package/dist/validation/workflow-scripts/credential-placeholders.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/credential-placeholders.js +278 -0
- package/dist/validation/workflow-scripts/credential-placeholders.js.map +1 -0
- package/dist/validation/workflow-scripts/db-always-output.d.ts +16 -0
- package/dist/validation/workflow-scripts/db-always-output.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/db-always-output.js +95 -0
- package/dist/validation/workflow-scripts/db-always-output.js.map +1 -0
- package/dist/validation/workflow-scripts/exec-workflow-wait.d.ts +15 -0
- package/dist/validation/workflow-scripts/exec-workflow-wait.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/exec-workflow-wait.js +85 -0
- package/dist/validation/workflow-scripts/exec-workflow-wait.js.map +1 -0
- package/dist/validation/workflow-scripts/index.d.ts +31 -0
- package/dist/validation/workflow-scripts/index.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/index.js +58 -0
- package/dist/validation/workflow-scripts/index.js.map +1 -0
- package/dist/validation/workflow-scripts/instparm-quoting.d.ts +21 -0
- package/dist/validation/workflow-scripts/instparm-quoting.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/instparm-quoting.js +59 -0
- package/dist/validation/workflow-scripts/instparm-quoting.js.map +1 -0
- package/dist/validation/workflow-scripts/llm-model-id.d.ts +17 -0
- package/dist/validation/workflow-scripts/llm-model-id.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/llm-model-id.js +171 -0
- package/dist/validation/workflow-scripts/llm-model-id.js.map +1 -0
- package/dist/validation/workflow-scripts/llm-output-access.d.ts +23 -0
- package/dist/validation/workflow-scripts/llm-output-access.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/llm-output-access.js +274 -0
- package/dist/validation/workflow-scripts/llm-output-access.js.map +1 -0
- package/dist/validation/workflow-scripts/merge-before-terminal.d.ts +20 -0
- package/dist/validation/workflow-scripts/merge-before-terminal.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/merge-before-terminal.js +87 -0
- package/dist/validation/workflow-scripts/merge-before-terminal.js.map +1 -0
- package/dist/validation/workflow-scripts/placeholder-syntax.d.ts +29 -0
- package/dist/validation/workflow-scripts/placeholder-syntax.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/placeholder-syntax.js +154 -0
- package/dist/validation/workflow-scripts/placeholder-syntax.js.map +1 -0
- package/dist/validation/workflow-scripts/retry-backoff.d.ts +16 -0
- package/dist/validation/workflow-scripts/retry-backoff.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/retry-backoff.js +197 -0
- package/dist/validation/workflow-scripts/retry-backoff.js.map +1 -0
- package/dist/validation/workflow-scripts/webhook-id.d.ts +17 -0
- package/dist/validation/workflow-scripts/webhook-id.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/webhook-id.js +79 -0
- package/dist/validation/workflow-scripts/webhook-id.js.map +1 -0
- package/dist/validation/workflow-scripts/workflow-format.d.ts +16 -0
- package/dist/validation/workflow-scripts/workflow-format.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/workflow-format.js +51 -0
- package/dist/validation/workflow-scripts/workflow-format.js.map +1 -0
- package/dist/validation/workflow-scripts/workflow-sanitization.d.ts +21 -0
- package/dist/validation/workflow-scripts/workflow-sanitization.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/workflow-sanitization.js +78 -0
- package/dist/validation/workflow-scripts/workflow-sanitization.js.map +1 -0
- package/dist/validation/workflow-scripts/workflow-settings.d.ts +19 -0
- package/dist/validation/workflow-scripts/workflow-settings.d.ts.map +1 -0
- package/dist/validation/workflow-scripts/workflow-settings.js +131 -0
- package/dist/validation/workflow-scripts/workflow-settings.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WEBHOOK-PATH-CONSISTENCY Validation Script
|
|
3
|
+
*
|
|
4
|
+
* Validates that HTTP trigger URLs in config.ts match the webhook node paths
|
|
5
|
+
* in the corresponding workflow JSON files.
|
|
6
|
+
*
|
|
7
|
+
* Also validates manualTriggerUrl for schedule triggers.
|
|
8
|
+
*
|
|
9
|
+
* Config URL pattern: {{ORGSECRET_N8N_BASE_URL_TERCESORG}}/webhook/<path>
|
|
10
|
+
* Workflow path: <path> (same as above, without base URL and /webhook/ prefix)
|
|
11
|
+
*
|
|
12
|
+
* @see .guides/specific/http-triggers.md - "URL Path Pattern"
|
|
13
|
+
* @see .guides/specific/schedule-triggers.md - "Important: Path Must Match"
|
|
14
|
+
*/
|
|
15
|
+
import { readFileSync, readdirSync, existsSync } from 'fs';
|
|
16
|
+
import { join, basename } from 'path';
|
|
17
|
+
export const RULE_ID = 'WEBHOOK-PATH-CONSISTENCY';
|
|
18
|
+
export const metadata = {
|
|
19
|
+
id: RULE_ID,
|
|
20
|
+
name: 'webhook_path_consistency',
|
|
21
|
+
severity: 'must', // Critical - mismatched paths/URLs cause workflow execution failures
|
|
22
|
+
description: 'HTTP trigger URLs must have correct structure and match webhook node paths',
|
|
23
|
+
details: 'Config URLs must start with {{ORGSECRET_N8N_BASE_URL_TERCESORG}}/webhook/ and the path portion must match the workflow webhook node path',
|
|
24
|
+
fixable: false, // Report only - user must manually fix
|
|
25
|
+
category: 'references',
|
|
26
|
+
guideRef: {
|
|
27
|
+
path: 'specific/http-triggers.md',
|
|
28
|
+
section: 'URL Path Pattern',
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
const HTTP_GUIDE_REF = {
|
|
32
|
+
path: 'specific/http-triggers.md',
|
|
33
|
+
section: 'URL Path Pattern',
|
|
34
|
+
};
|
|
35
|
+
const SCHEDULE_GUIDE_REF = {
|
|
36
|
+
path: 'specific/schedule-triggers.md',
|
|
37
|
+
section: 'Important: Path Must Match',
|
|
38
|
+
};
|
|
39
|
+
// Expected base URL pattern
|
|
40
|
+
const BASE_URL_PATTERN = '{{ORGSECRET_N8N_BASE_URL_TERCESORG}}';
|
|
41
|
+
const WEBHOOK_PREFIX = '/webhook/';
|
|
42
|
+
/**
|
|
43
|
+
* Extracts the path portion from a webhook URL
|
|
44
|
+
* Returns null if the URL doesn't have the expected structure
|
|
45
|
+
*/
|
|
46
|
+
function extractPathFromUrl(url) {
|
|
47
|
+
const webhookIndex = url.indexOf(WEBHOOK_PREFIX);
|
|
48
|
+
if (webhookIndex === -1) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return url.slice(webhookIndex + WEBHOOK_PREFIX.length);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Validates URL structure
|
|
55
|
+
* Returns an error message if invalid, null if valid
|
|
56
|
+
*/
|
|
57
|
+
function validateUrlStructure(url) {
|
|
58
|
+
// Check for base URL
|
|
59
|
+
if (!url.startsWith(BASE_URL_PATTERN)) {
|
|
60
|
+
return `URL must start with ${BASE_URL_PATTERN}`;
|
|
61
|
+
}
|
|
62
|
+
// Check for /webhook/ prefix after base URL
|
|
63
|
+
const afterBaseUrl = url.slice(BASE_URL_PATTERN.length);
|
|
64
|
+
if (!afterBaseUrl.startsWith(WEBHOOK_PREFIX)) {
|
|
65
|
+
return `URL must include ${WEBHOOK_PREFIX} after the base URL`;
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extracts trigger URLs from config.ts content
|
|
71
|
+
* Returns URLs from HTTP triggers (url field) and schedule triggers (manualTriggerUrl field)
|
|
72
|
+
*/
|
|
73
|
+
function extractConfigTriggerUrls(configContent) {
|
|
74
|
+
const triggerUrls = [];
|
|
75
|
+
// Find all workflow blocks with workflowTemplateId
|
|
76
|
+
const workflowBlockPattern = /workflowTemplateId:\s*['"]([^'"]+)['"]/g;
|
|
77
|
+
let templateMatch;
|
|
78
|
+
while ((templateMatch = workflowBlockPattern.exec(configContent)) !== null) {
|
|
79
|
+
const templateId = templateMatch[1];
|
|
80
|
+
const templateIdEndPos = templateMatch.index + templateMatch[0].length;
|
|
81
|
+
// Find the end of this workflow block (next workflowTemplateId or end)
|
|
82
|
+
const nextTemplatePattern = /workflowTemplateId:/g;
|
|
83
|
+
nextTemplatePattern.lastIndex = templateIdEndPos;
|
|
84
|
+
const nextMatch = nextTemplatePattern.exec(configContent);
|
|
85
|
+
const blockEnd = nextMatch ? nextMatch.index : configContent.length;
|
|
86
|
+
const workflowBlock = configContent.slice(templateMatch.index, blockEnd);
|
|
87
|
+
// Find triggers array in this block
|
|
88
|
+
const triggersMatch = workflowBlock.match(/triggers:\s*\[([\s\S]*?)\]/);
|
|
89
|
+
if (!triggersMatch)
|
|
90
|
+
continue;
|
|
91
|
+
const triggersContent = triggersMatch[1];
|
|
92
|
+
// Find HTTP triggers with url field
|
|
93
|
+
// Pattern: type: 'http' ... url: `...`
|
|
94
|
+
const httpTriggerPattern = /\{[^{}]*type:\s*['"]http['"][^{}]*triggerId:\s*['"]([^'"]+)['"][^{}]*url:\s*[`'"]([^`'"]+)[`'"][^{}]*\}|\{[^{}]*triggerId:\s*['"]([^'"]+)['"][^{}]*type:\s*['"]http['"][^{}]*url:\s*[`'"]([^`'"]+)[`'"][^{}]*\}|\{[^{}]*url:\s*[`'"]([^`'"]+)[`'"][^{}]*type:\s*['"]http['"][^{}]*triggerId:\s*['"]([^'"]+)['"][^{}]*\}/g;
|
|
95
|
+
let httpMatch;
|
|
96
|
+
while ((httpMatch = httpTriggerPattern.exec(triggersContent)) !== null) {
|
|
97
|
+
const triggerId = httpMatch[1] || httpMatch[3] || httpMatch[6];
|
|
98
|
+
const url = httpMatch[2] || httpMatch[4] || httpMatch[5];
|
|
99
|
+
if (triggerId && url) {
|
|
100
|
+
triggerUrls.push({
|
|
101
|
+
workflowTemplateId: templateId,
|
|
102
|
+
triggerId,
|
|
103
|
+
url,
|
|
104
|
+
isManualTrigger: false,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Find schedule triggers with manualTriggerUrl field
|
|
109
|
+
const scheduleTriggerPattern = /\{[^{}]*type:\s*['"]schedule['"][^{}]*triggerId:\s*['"]([^'"]+)['"][^{}]*manualTriggerUrl:\s*[`'"]([^`'"]+)[`'"][^{}]*\}|\{[^{}]*triggerId:\s*['"]([^'"]+)['"][^{}]*type:\s*['"]schedule['"][^{}]*manualTriggerUrl:\s*[`'"]([^`'"]+)[`'"][^{}]*\}|\{[^{}]*manualTriggerUrl:\s*[`'"]([^`'"]+)[`'"][^{}]*type:\s*['"]schedule['"][^{}]*triggerId:\s*['"]([^'"]+)['"][^{}]*\}/g;
|
|
110
|
+
let scheduleMatch;
|
|
111
|
+
while ((scheduleMatch = scheduleTriggerPattern.exec(triggersContent)) !== null) {
|
|
112
|
+
const triggerId = scheduleMatch[1] || scheduleMatch[3] || scheduleMatch[6];
|
|
113
|
+
const url = scheduleMatch[2] || scheduleMatch[4] || scheduleMatch[5];
|
|
114
|
+
if (triggerId && url) {
|
|
115
|
+
triggerUrls.push({
|
|
116
|
+
workflowTemplateId: templateId,
|
|
117
|
+
triggerId,
|
|
118
|
+
url,
|
|
119
|
+
isManualTrigger: true,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return triggerUrls;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Extracts webhook node paths from a workflow JSON
|
|
128
|
+
*/
|
|
129
|
+
function extractWebhookPaths(workflowContent) {
|
|
130
|
+
const paths = [];
|
|
131
|
+
try {
|
|
132
|
+
const workflow = JSON.parse(workflowContent);
|
|
133
|
+
for (const node of workflow.nodes || []) {
|
|
134
|
+
if (node.type === 'n8n-nodes-base.webhook' && node.parameters?.path) {
|
|
135
|
+
paths.push(node.parameters.path);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// Invalid JSON - will be caught by other validators
|
|
141
|
+
}
|
|
142
|
+
return paths;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Validates webhook path consistency for a use case
|
|
146
|
+
*/
|
|
147
|
+
export async function checkWebhookPathConsistency(useCasePath) {
|
|
148
|
+
const findings = [];
|
|
149
|
+
// Check if config.ts exists
|
|
150
|
+
const configPath = join(useCasePath, 'config.ts');
|
|
151
|
+
if (!existsSync(configPath)) {
|
|
152
|
+
// Cannot validate without config.ts - this is handled by other rules
|
|
153
|
+
return findings;
|
|
154
|
+
}
|
|
155
|
+
// Read config.ts
|
|
156
|
+
let configContent;
|
|
157
|
+
try {
|
|
158
|
+
configContent = readFileSync(configPath, 'utf-8');
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Cannot read config.ts - this is handled by other rules
|
|
162
|
+
return findings;
|
|
163
|
+
}
|
|
164
|
+
// Extract trigger URLs from config
|
|
165
|
+
const triggerUrls = extractConfigTriggerUrls(configContent);
|
|
166
|
+
// No HTTP triggers or schedule triggers with manualTriggerUrl - nothing to validate
|
|
167
|
+
if (triggerUrls.length === 0) {
|
|
168
|
+
return findings;
|
|
169
|
+
}
|
|
170
|
+
// Check workflows folder
|
|
171
|
+
const workflowsPath = join(useCasePath, 'workflows');
|
|
172
|
+
if (!existsSync(workflowsPath)) {
|
|
173
|
+
// No workflows folder - HTTP triggers would be invalid
|
|
174
|
+
for (const trigger of triggerUrls) {
|
|
175
|
+
findings.push({
|
|
176
|
+
rule: RULE_ID,
|
|
177
|
+
severity: 'must',
|
|
178
|
+
path: configPath,
|
|
179
|
+
message: `Trigger "${trigger.triggerId}" in workflow "${trigger.workflowTemplateId}" has URL but no workflows folder exists`,
|
|
180
|
+
raw_details: 'Create a workflows folder with the corresponding workflow JSON file',
|
|
181
|
+
guideRef: trigger.isManualTrigger ? SCHEDULE_GUIDE_REF : HTTP_GUIDE_REF,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return findings;
|
|
185
|
+
}
|
|
186
|
+
// Get all workflow JSON files
|
|
187
|
+
let workflowFiles;
|
|
188
|
+
try {
|
|
189
|
+
workflowFiles = readdirSync(workflowsPath)
|
|
190
|
+
.filter(f => f.endsWith('.json'))
|
|
191
|
+
.map(f => join(workflowsPath, f));
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// Cannot read workflows folder - this is handled by other rules
|
|
195
|
+
return findings;
|
|
196
|
+
}
|
|
197
|
+
// Build a map of workflowTemplateId -> webhook paths
|
|
198
|
+
const workflowWebhookPaths = new Map();
|
|
199
|
+
for (const workflowFile of workflowFiles) {
|
|
200
|
+
const templateId = basename(workflowFile, '.json');
|
|
201
|
+
let content;
|
|
202
|
+
try {
|
|
203
|
+
content = readFileSync(workflowFile, 'utf-8');
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
continue; // Skip unreadable files
|
|
207
|
+
}
|
|
208
|
+
const paths = extractWebhookPaths(content);
|
|
209
|
+
workflowWebhookPaths.set(templateId, paths);
|
|
210
|
+
}
|
|
211
|
+
// Validate each trigger URL
|
|
212
|
+
for (const trigger of triggerUrls) {
|
|
213
|
+
const guideRef = trigger.isManualTrigger ? SCHEDULE_GUIDE_REF : HTTP_GUIDE_REF;
|
|
214
|
+
const triggerType = trigger.isManualTrigger ? 'manualTriggerUrl' : 'url';
|
|
215
|
+
// Check 1: URL structure validation
|
|
216
|
+
const structureError = validateUrlStructure(trigger.url);
|
|
217
|
+
if (structureError) {
|
|
218
|
+
findings.push({
|
|
219
|
+
rule: RULE_ID,
|
|
220
|
+
severity: 'must',
|
|
221
|
+
path: configPath,
|
|
222
|
+
message: `Invalid ${triggerType} structure in trigger "${trigger.triggerId}" of workflow "${trigger.workflowTemplateId}": ${structureError}`,
|
|
223
|
+
raw_details: `The ${triggerType} must follow the pattern: ${BASE_URL_PATTERN}${WEBHOOK_PREFIX}<path>\n\n` +
|
|
224
|
+
`Current value: ${trigger.url}\n\n` +
|
|
225
|
+
`See documentation for correct pattern:\n` +
|
|
226
|
+
`- .guides/${guideRef.path} > "${guideRef.section}"`,
|
|
227
|
+
guideRef,
|
|
228
|
+
});
|
|
229
|
+
continue; // Skip path check if structure is invalid
|
|
230
|
+
}
|
|
231
|
+
// Check 2: Path consistency
|
|
232
|
+
const expectedPath = extractPathFromUrl(trigger.url);
|
|
233
|
+
if (!expectedPath) {
|
|
234
|
+
// This shouldn't happen if structure validation passed, but handle it
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
const workflowPaths = workflowWebhookPaths.get(trigger.workflowTemplateId);
|
|
238
|
+
if (!workflowPaths) {
|
|
239
|
+
// Workflow file doesn't exist
|
|
240
|
+
findings.push({
|
|
241
|
+
rule: RULE_ID,
|
|
242
|
+
severity: 'must',
|
|
243
|
+
path: configPath,
|
|
244
|
+
message: `Cannot find workflow file for "${trigger.workflowTemplateId}" to validate webhook path`,
|
|
245
|
+
raw_details: `The trigger "${trigger.triggerId}" references workflow "${trigger.workflowTemplateId}" ` +
|
|
246
|
+
`but no workflow file "${trigger.workflowTemplateId}.json" was found in the workflows folder.`,
|
|
247
|
+
guideRef,
|
|
248
|
+
});
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
if (workflowPaths.length === 0) {
|
|
252
|
+
// Workflow exists but has no webhook nodes
|
|
253
|
+
findings.push({
|
|
254
|
+
rule: RULE_ID,
|
|
255
|
+
severity: 'must',
|
|
256
|
+
path: join(workflowsPath, `${trigger.workflowTemplateId}.json`),
|
|
257
|
+
message: `Workflow "${trigger.workflowTemplateId}" has no webhook node but trigger "${trigger.triggerId}" expects one`,
|
|
258
|
+
raw_details: `The trigger "${trigger.triggerId}" has ${triggerType} set but the workflow has no webhook node.\n\n` +
|
|
259
|
+
`Expected webhook path: ${expectedPath}\n\n` +
|
|
260
|
+
`Add a webhook node with the matching path to the workflow, or remove the trigger URL from config.ts.\n\n` +
|
|
261
|
+
`See documentation:\n` +
|
|
262
|
+
`- .guides/${guideRef.path} > "${guideRef.section}"`,
|
|
263
|
+
guideRef,
|
|
264
|
+
});
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
// Check if any webhook path matches
|
|
268
|
+
if (!workflowPaths.includes(expectedPath)) {
|
|
269
|
+
const actualPathsStr = workflowPaths.map(p => `"${p}"`).join(', ');
|
|
270
|
+
findings.push({
|
|
271
|
+
rule: RULE_ID,
|
|
272
|
+
severity: 'must',
|
|
273
|
+
path: join(workflowsPath, `${trigger.workflowTemplateId}.json`),
|
|
274
|
+
message: `Webhook path mismatch in "${trigger.workflowTemplateId}": config expects "${expectedPath}" but workflow has ${actualPathsStr}`,
|
|
275
|
+
raw_details: `The path in the config.ts trigger ${triggerType} must match the webhook node path in the workflow JSON.\n\n` +
|
|
276
|
+
`Config ${triggerType} path: ${expectedPath}\n` +
|
|
277
|
+
`Workflow webhook path(s): ${actualPathsStr}\n\n` +
|
|
278
|
+
`Either update the ${triggerType} in config.ts or the webhook node path in the workflow.\n\n` +
|
|
279
|
+
`See documentation for correct pattern:\n` +
|
|
280
|
+
`- .guides/${guideRef.path} > "${guideRef.section}"`,
|
|
281
|
+
guideRef,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return findings;
|
|
286
|
+
}
|
|
287
|
+
export default checkWebhookPathConsistency;
|
|
288
|
+
//# sourceMappingURL=webhook-path-consistency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-path-consistency.js","sourceRoot":"","sources":["../../../src/validation/use-case-scripts/webhook-path-consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGtC,MAAM,CAAC,MAAM,OAAO,GAAG,0BAA0B,CAAC;AAElD,MAAM,CAAC,MAAM,QAAQ,GAAmE;IACtF,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,0BAA0B;IAChC,QAAQ,EAAE,MAAM,EAAE,qEAAqE;IACvF,WAAW,EAAE,4EAA4E;IACzF,OAAO,EACL,0IAA0I;IAC5I,OAAO,EAAE,KAAK,EAAE,uCAAuC;IACvD,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE;QACR,IAAI,EAAE,2BAA2B;QACjC,OAAO,EAAE,kBAAkB;KAC5B;CACF,CAAC;AAEF,MAAM,cAAc,GAAG;IACrB,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,kBAAkB;CAC5B,CAAC;AAEF,MAAM,kBAAkB,GAAG;IACzB,IAAI,EAAE,+BAA+B;IACrC,OAAO,EAAE,4BAA4B;CACtC,CAAC;AAEF,4BAA4B;AAC5B,MAAM,gBAAgB,GAAG,sCAAsC,CAAC;AAChE,MAAM,cAAc,GAAG,WAAW,CAAC;AAYnC;;;GAGG;AACH,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACjD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,GAAW;IACvC,qBAAqB;IACrB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACtC,OAAO,uBAAuB,gBAAgB,EAAE,CAAC;IACnD,CAAC;IAED,4CAA4C;IAC5C,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACxD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7C,OAAO,oBAAoB,cAAc,qBAAqB,CAAC;IACjE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,aAAqB;IACrD,MAAM,WAAW,GAAqB,EAAE,CAAC;IAEzC,mDAAmD;IACnD,MAAM,oBAAoB,GAAG,yCAAyC,CAAC;IACvE,IAAI,aAAa,CAAC;IAElB,OAAO,CAAC,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3E,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,gBAAgB,GAAG,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAEvE,uEAAuE;QACvE,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;QACnD,mBAAmB,CAAC,SAAS,GAAG,gBAAgB,CAAC;QACjD,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;QAEpE,MAAM,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEzE,oCAAoC;QACpC,MAAM,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACxE,IAAI,CAAC,aAAa;YAAE,SAAS;QAE7B,MAAM,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAEzC,oCAAoC;QACpC,uCAAuC;QACvC,MAAM,kBAAkB,GACtB,0TAA0T,CAAC;QAC7T,IAAI,SAAS,CAAC;QAEd,OAAO,CAAC,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACvE,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;YAC/D,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;YACzD,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;gBACrB,WAAW,CAAC,IAAI,CAAC;oBACf,kBAAkB,EAAE,UAAU;oBAC9B,SAAS;oBACT,GAAG;oBACH,eAAe,EAAE,KAAK;iBACvB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,qDAAqD;QACrD,MAAM,sBAAsB,GAC1B,6WAA6W,CAAC;QAChX,IAAI,aAAa,CAAC;QAElB,OAAO,CAAC,aAAa,GAAG,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/E,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;YACrE,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;gBACrB,WAAW,CAAC,IAAI,CAAC;oBACf,kBAAkB,EAAE,UAAU;oBAC9B,SAAS;oBACT,GAAG;oBACH,eAAe,EAAE,IAAI;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,eAAuB;IAClD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;gBACpE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oDAAoD;IACtD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,WAAmB;IACnE,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,4BAA4B;IAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,qEAAqE;QACrE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,iBAAiB;IACjB,IAAI,aAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,aAAa,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;QACzD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,mCAAmC;IACnC,MAAM,WAAW,GAAG,wBAAwB,CAAC,aAAa,CAAC,CAAC;IAE5D,oFAAoF;IACpF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,yBAAyB;IACzB,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,uDAAuD;QACvD,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,YAAY,OAAO,CAAC,SAAS,kBAAkB,OAAO,CAAC,kBAAkB,0CAA0C;gBAC5H,WAAW,EAAE,qEAAqE;gBAClF,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc;aACxE,CAAC,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,8BAA8B;IAC9B,IAAI,aAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;aACvC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;QAChE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,qDAAqD;IACrD,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAoB,CAAC;IACzD,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,CAAC,wBAAwB;QACpC,CAAC;QAED,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,4BAA4B;IAC5B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC;QAC/E,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC;QAEzE,oCAAoC;QACpC,MAAM,cAAc,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,cAAc,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,WAAW,WAAW,0BAA0B,OAAO,CAAC,SAAS,kBAAkB,OAAO,CAAC,kBAAkB,MAAM,cAAc,EAAE;gBAC5I,WAAW,EACT,OAAO,WAAW,6BAA6B,gBAAgB,GAAG,cAAc,YAAY;oBAC5F,kBAAkB,OAAO,CAAC,GAAG,MAAM;oBACnC,0CAA0C;oBAC1C,aAAa,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,OAAO,GAAG;gBACtD,QAAQ;aACT,CAAC,CAAC;YACH,SAAS,CAAC,0CAA0C;QACtD,CAAC;QAED,4BAA4B;QAC5B,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,sEAAsE;YACtE,SAAS;QACX,CAAC;QAED,MAAM,aAAa,GAAG,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAE3E,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,8BAA8B;YAC9B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,kCAAkC,OAAO,CAAC,kBAAkB,4BAA4B;gBACjG,WAAW,EACT,gBAAgB,OAAO,CAAC,SAAS,0BAA0B,OAAO,CAAC,kBAAkB,IAAI;oBACzF,yBAAyB,OAAO,CAAC,kBAAkB,2CAA2C;gBAChG,QAAQ;aACT,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,2CAA2C;YAC3C,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,OAAO,CAAC,kBAAkB,OAAO,CAAC;gBAC/D,OAAO,EAAE,aAAa,OAAO,CAAC,kBAAkB,sCAAsC,OAAO,CAAC,SAAS,eAAe;gBACtH,WAAW,EACT,gBAAgB,OAAO,CAAC,SAAS,SAAS,WAAW,gDAAgD;oBACrG,0BAA0B,YAAY,MAAM;oBAC5C,0GAA0G;oBAC1G,sBAAsB;oBACtB,aAAa,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,OAAO,GAAG;gBACtD,QAAQ;aACT,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC1C,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,OAAO,CAAC,kBAAkB,OAAO,CAAC;gBAC/D,OAAO,EAAE,6BAA6B,OAAO,CAAC,kBAAkB,sBAAsB,YAAY,sBAAsB,cAAc,EAAE;gBACxI,WAAW,EACT,qCAAqC,WAAW,6DAA6D;oBAC7G,UAAU,WAAW,UAAU,YAAY,IAAI;oBAC/C,6BAA6B,cAAc,MAAM;oBACjD,qBAAqB,WAAW,6DAA6D;oBAC7F,0CAA0C;oBAC1C,aAAa,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,OAAO,GAAG;gBACtD,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,eAAe,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Script: CONFIG-WORKFLOWS
|
|
3
|
+
*
|
|
4
|
+
* Validates that:
|
|
5
|
+
* - All files listed in WORKFLOW_FILES exist
|
|
6
|
+
* - All JSON files in workflows/ are listed in WORKFLOW_FILES
|
|
7
|
+
* - Workflow JSON files are valid JSON
|
|
8
|
+
*/
|
|
9
|
+
import type { Finding } from '../types.js';
|
|
10
|
+
import type { RuleMetadata } from '../types.js';
|
|
11
|
+
export declare const metadata: RuleMetadata;
|
|
12
|
+
/**
|
|
13
|
+
* Check workflow imports consistency
|
|
14
|
+
*/
|
|
15
|
+
export declare function checkWorkflowImports(useCasePath: string): Promise<Finding[]>;
|
|
16
|
+
//# sourceMappingURL=workflow-imports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-imports.d.ts","sourceRoot":"","sources":["../../../src/validation/use-case-scripts/workflow-imports.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,QAAQ,EAAE,YAOtB,CAAC;AAoFF;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAqHlF"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Script: CONFIG-WORKFLOWS
|
|
3
|
+
*
|
|
4
|
+
* Validates that:
|
|
5
|
+
* - All files listed in WORKFLOW_FILES exist
|
|
6
|
+
* - All JSON files in workflows/ are listed in WORKFLOW_FILES
|
|
7
|
+
* - Workflow JSON files are valid JSON
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
|
|
10
|
+
import { join, basename } from 'path';
|
|
11
|
+
export const metadata = {
|
|
12
|
+
id: 'CONFIG-WORKFLOWS',
|
|
13
|
+
name: 'workflow_imports',
|
|
14
|
+
severity: 'must',
|
|
15
|
+
description: 'All workflows must be listed in WORKFLOW_FILES and exist on disk',
|
|
16
|
+
details: 'Ensure WORKFLOW_FILES array matches the actual workflow files in the workflows/ folder',
|
|
17
|
+
category: 'config',
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Quote bare INSTPARM placeholders (outside JSON strings) so the file parses as valid JSON.
|
|
21
|
+
* INSTPARM values like {{INSTPARM_PHONE_MRAPTSNI}} are intentionally unquoted in workflow
|
|
22
|
+
* templates — the deployer replaces them with typed values. But the validator needs valid JSON.
|
|
23
|
+
*
|
|
24
|
+
* Placeholders inside JSON string values (e.g., jsCode) are left untouched.
|
|
25
|
+
*/
|
|
26
|
+
function quoteBarePlaceholders(content) {
|
|
27
|
+
const placeholder = /\{\{INSTPARM_[A-Z0-9_]+_MRAPTSNI\}\}/g;
|
|
28
|
+
let result = '';
|
|
29
|
+
let inString = false;
|
|
30
|
+
let i = 0;
|
|
31
|
+
while (i < content.length) {
|
|
32
|
+
const ch = content[i];
|
|
33
|
+
if (inString) {
|
|
34
|
+
result += ch;
|
|
35
|
+
if (ch === '\\') {
|
|
36
|
+
// Skip escaped character
|
|
37
|
+
i++;
|
|
38
|
+
if (i < content.length)
|
|
39
|
+
result += content[i];
|
|
40
|
+
}
|
|
41
|
+
else if (ch === '"') {
|
|
42
|
+
inString = false;
|
|
43
|
+
}
|
|
44
|
+
i++;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (ch === '"') {
|
|
48
|
+
inString = true;
|
|
49
|
+
result += ch;
|
|
50
|
+
i++;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
// Outside a string — check for bare placeholder
|
|
54
|
+
placeholder.lastIndex = i;
|
|
55
|
+
const match = placeholder.exec(content);
|
|
56
|
+
if (match && match.index === i) {
|
|
57
|
+
result += `"${match[0]}"`;
|
|
58
|
+
i += match[0].length;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
result += ch;
|
|
62
|
+
i++;
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Extract WORKFLOW_FILES array from config content (simplified parser)
|
|
68
|
+
*/
|
|
69
|
+
function extractWorkflowFiles(content) {
|
|
70
|
+
// Look for WORKFLOW_FILES = [...] pattern
|
|
71
|
+
const match = content.match(/WORKFLOW_FILES\s*=\s*\[([\s\S]*?)\]/);
|
|
72
|
+
if (!match) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
const arrayContent = match[1];
|
|
76
|
+
// Extract string literals (simplified - works for common patterns)
|
|
77
|
+
const files = [];
|
|
78
|
+
// Match join(..., 'path') patterns
|
|
79
|
+
const joinMatches = arrayContent.matchAll(/join\s*\([^,]+,\s*['"]([^'"]+)['"]\)/g);
|
|
80
|
+
for (const m of joinMatches) {
|
|
81
|
+
files.push(m[1]);
|
|
82
|
+
}
|
|
83
|
+
// Match direct string patterns
|
|
84
|
+
const stringMatches = arrayContent.matchAll(/['"]([^'"]+\.json)['"]/g);
|
|
85
|
+
for (const m of stringMatches) {
|
|
86
|
+
files.push(m[1]);
|
|
87
|
+
}
|
|
88
|
+
return files;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check workflow imports consistency
|
|
92
|
+
*/
|
|
93
|
+
export async function checkWorkflowImports(useCasePath) {
|
|
94
|
+
const findings = [];
|
|
95
|
+
const workflowsPath = join(useCasePath, 'workflows');
|
|
96
|
+
// Check workflows folder exists
|
|
97
|
+
if (!existsSync(workflowsPath)) {
|
|
98
|
+
findings.push({
|
|
99
|
+
rule: metadata.id,
|
|
100
|
+
severity: 'must',
|
|
101
|
+
path: useCasePath,
|
|
102
|
+
message: 'Missing workflows/ folder',
|
|
103
|
+
raw_details: 'Create a workflows/ folder and add your workflow JSON files',
|
|
104
|
+
});
|
|
105
|
+
return findings;
|
|
106
|
+
}
|
|
107
|
+
// Get actual workflow files
|
|
108
|
+
const actualFiles = new Set();
|
|
109
|
+
try {
|
|
110
|
+
const entries = readdirSync(workflowsPath);
|
|
111
|
+
for (const entry of entries) {
|
|
112
|
+
if (entry.endsWith('.json')) {
|
|
113
|
+
const fullPath = join(workflowsPath, entry);
|
|
114
|
+
if (statSync(fullPath).isFile()) {
|
|
115
|
+
actualFiles.add(entry);
|
|
116
|
+
// Validate JSON (temporarily quote bare INSTPARM placeholders which are
|
|
117
|
+
// intentionally unquoted in templates — they get replaced at deploy time).
|
|
118
|
+
// Only replace placeholders that appear as bare JSON values, not those
|
|
119
|
+
// inside JSON strings (e.g., inside jsCode). We track string context
|
|
120
|
+
// character by character to avoid breaking valid strings.
|
|
121
|
+
try {
|
|
122
|
+
const content = readFileSync(fullPath, 'utf-8');
|
|
123
|
+
const normalized = quoteBarePlaceholders(content);
|
|
124
|
+
JSON.parse(normalized);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
findings.push({
|
|
128
|
+
rule: 'JSON-VALID',
|
|
129
|
+
severity: 'must',
|
|
130
|
+
path: fullPath,
|
|
131
|
+
message: `Invalid JSON in ${entry}: ${error.message}`,
|
|
132
|
+
raw_details: 'Fix the JSON syntax errors in this file',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
findings.push({
|
|
141
|
+
rule: metadata.id,
|
|
142
|
+
severity: 'must',
|
|
143
|
+
path: workflowsPath,
|
|
144
|
+
message: `Cannot read workflows folder: ${error.message}`,
|
|
145
|
+
});
|
|
146
|
+
return findings;
|
|
147
|
+
}
|
|
148
|
+
// Try to read config.ts to check WORKFLOW_FILES
|
|
149
|
+
const configPath = join(useCasePath, 'config.ts');
|
|
150
|
+
if (existsSync(configPath)) {
|
|
151
|
+
try {
|
|
152
|
+
const configContent = readFileSync(configPath, 'utf-8');
|
|
153
|
+
const declaredFiles = extractWorkflowFiles(configContent);
|
|
154
|
+
if (declaredFiles !== null) {
|
|
155
|
+
const declaredNames = new Set(declaredFiles.map(f => basename(f)));
|
|
156
|
+
// Check for files in WORKFLOW_FILES that don't exist
|
|
157
|
+
for (const declaredFile of declaredFiles) {
|
|
158
|
+
const fileName = basename(declaredFile);
|
|
159
|
+
const fullPath = join(workflowsPath, fileName);
|
|
160
|
+
if (!existsSync(fullPath)) {
|
|
161
|
+
findings.push({
|
|
162
|
+
rule: metadata.id,
|
|
163
|
+
severity: 'must',
|
|
164
|
+
path: configPath,
|
|
165
|
+
message: `WORKFLOW_FILES references non-existent file: ${declaredFile}`,
|
|
166
|
+
raw_details: `Either create ${fileName} in workflows/ or remove it from WORKFLOW_FILES`,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Check for files in workflows/ not listed in WORKFLOW_FILES
|
|
171
|
+
for (const actualFile of actualFiles) {
|
|
172
|
+
if (!declaredNames.has(actualFile)) {
|
|
173
|
+
findings.push({
|
|
174
|
+
rule: metadata.id,
|
|
175
|
+
severity: 'must',
|
|
176
|
+
path: join(workflowsPath, actualFile),
|
|
177
|
+
message: `Workflow file not listed in WORKFLOW_FILES: ${actualFile}`,
|
|
178
|
+
raw_details: `Add this file to WORKFLOW_FILES array or remove it from workflows/`,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
// Could not parse WORKFLOW_FILES from config.ts
|
|
185
|
+
findings.push({
|
|
186
|
+
rule: metadata.id,
|
|
187
|
+
severity: 'must',
|
|
188
|
+
path: configPath,
|
|
189
|
+
message: 'Cannot parse WORKFLOW_FILES array from config.ts',
|
|
190
|
+
raw_details: 'Ensure config.ts exports a valid WORKFLOW_FILES array with proper syntax',
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
findings.push({
|
|
196
|
+
rule: metadata.id,
|
|
197
|
+
severity: 'must',
|
|
198
|
+
path: configPath,
|
|
199
|
+
message: `Cannot parse WORKFLOW_FILES in config.ts: ${error.message}`,
|
|
200
|
+
raw_details: 'Fix syntax errors in config.ts or ensure WORKFLOW_FILES is properly formatted',
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return findings;
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=workflow-imports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-imports.js","sourceRoot":"","sources":["../../../src/validation/use-case-scripts/workflow-imports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Script: CRED-PLACEHOLDER
|
|
3
|
+
*
|
|
4
|
+
* Validates that credential references in workflows use proper placeholders.
|
|
5
|
+
*
|
|
6
|
+
* Valid credential placeholder patterns:
|
|
7
|
+
* - {{FLEXCRED_CREDNAME_ID_DERCXELF}} / {{FLEXCRED_CREDNAME_NAME_DERCXELF}} (flexible - tries org first, falls back to user)
|
|
8
|
+
* - {{USERCRED_CREDNAME_ID_DERCRESU}} / {{USERCRED_CREDNAME_NAME_DERCRESU}} (user credentials)
|
|
9
|
+
* - {{ORGCRED_CREDNAME_ID_DERCGRO}} / {{ORGCRED_CREDNAME_NAME_DERCGRO}} (organization credentials)
|
|
10
|
+
* - {{INSTCRED_CREDNAME_ID_DERCTSNI}} / {{INSTCRED_CREDNAME_NAME_DERCTSNI}} (instance credentials)
|
|
11
|
+
*
|
|
12
|
+
* Both `id` and `name` fields must use proper placeholders with _ID_ and _NAME_ markers respectively.
|
|
13
|
+
*/
|
|
14
|
+
import type { Finding } from '../types.js';
|
|
15
|
+
import type { RuleMetadata } from '../types.js';
|
|
16
|
+
export declare const metadata: RuleMetadata;
|
|
17
|
+
/**
|
|
18
|
+
* Check for credential placeholder issues
|
|
19
|
+
*/
|
|
20
|
+
export declare function checkCredentialPlaceholders(content: string, path: string): Finding[];
|
|
21
|
+
//# sourceMappingURL=credential-placeholders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-placeholders.d.ts","sourceRoot":"","sources":["../../../src/validation/workflow-scripts/credential-placeholders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,QAAQ,EAAE,YAStB,CAAC;AA2JF;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CA6HpF"}
|