Document Extractor [x] Extracts title and resolves pdf link [x] Follows filtered listing to detail page [x] Accepts x path selectors [x] Ignores empty and fragment links while extracting pdfs [x] Follows the portal contract details link and extracts its pdf Download Command [x] Limit processes only valid records and writes report [x] Legacy english command is still available Example Session [x] Session simple File Downloader [x] Does not overwrite an existing file [x] Does not treat an incomplete existing file as completed [x] Streams and validates http responses Folder Manager [x] Sanitizes names and separates duplicate titles Health [x] Is defined app path [x] Base url has been set Json Reader [x] Skips missing identifiers and removes duplicates [x] Rejects non list json root Record Processor [x] Builds query from base ending in empty parameter Report Generator [x] Writes a unique json report per execution Safe Http Client [x] Validates redirects and enforces byte limit [x] Caps redirects and rejects non http redirect targets [x] Rejects redirect to private address before connecting Url Validator [x] Allows public http and https addresses [x] Rejects unsupported schemes and private resolved addresses [x] Rejects non http protocols [x] Rejects loopback private and reserved addresses [x] Rejects local hostnames [x] Rejects trailing dot and obfuscated numeric hosts [x] Resolves relative references