# Script compression utilities for secure transmission # Compresses template path, variables, and script as a complete auditable unit # Compress complete workflow data (template + vars + script) export def compress-workflow [template_path: string, template_vars: record, script: string]: nothing -> record { # Create temporary directory let timestamp_hash = ((date now | format date "%Y%m%d_%H%M%S") | hash sha256 | str substring 0..8) let temp_dir = $"/tmp/workflow_($timestamp_hash)" ^mkdir -p $temp_dir # 1. Compress template_vars (JSON) let vars_file = ($temp_dir + "/vars.json") let vars_json = ($template_vars | to json) $vars_json | save -f $vars_file let vars_original_size = ($vars_json | str length) # 2. Compress script let script_file = ($temp_dir + "/script.sh") $script | save -f $script_file let script_original_size = ($script | str length) # 3. Create manifest with template_path let manifest_file = ($temp_dir + "/manifest.json") { template_path: $template_path timestamp: ((date now) | format date "%Y-%m-%d %H:%M:%S UTC") } | to json | save -f $manifest_file # 4. Combine all into single archive let total_original = ($vars_original_size + $script_original_size) let archive_file = ($temp_dir + "/workflow.tar.gz") ^tar -czf $archive_file -C $temp_dir manifest.json vars.json script.sh # 5. Encode to base64 let tar_content = (open -r $archive_file) let compressed_data = ($tar_content | ^base64) # Get compressed size using base64 encoded output (approximation) let compressed_size = ($compressed_data | str length) # Calculate ratio let compression_ratio = ($compressed_size / $total_original) # Cleanup ^rm -rf $temp_dir { template_path: $template_path script_compressed: $compressed_data script_encoding: "tar+gzip+base64" original_size: $total_original compressed_size: $compressed_size compression_ratio: $compression_ratio } } # Decompress workflow (for verification/testing) export def decompress-workflow [script_compressed: string]: nothing -> record { let timestamp_hash = ((date now | format date "%Y%m%d_%H%M%S") | hash sha256 | str substring 0..8) let temp_dir = $"/tmp/workflow_decompress_($timestamp_hash)" ^mkdir -p $temp_dir # Decode from base64 let decoded = (echo $script_compressed | ^base64 -d) # Extract tar.gz echo $decoded | ^tar -xzf - -C $temp_dir # Read files let manifest = (open ($temp_dir + "/manifest.json")) let vars = (open ($temp_dir + "/vars.json")) let script = (open -r ($temp_dir + "/script.sh")) # Cleanup ^rm -rf $temp_dir { template_path: $manifest.template_path template_vars: $vars script: $script timestamp: $manifest.timestamp } }