{"_id":"@arachnodex/job-link-issues","_rev":"12-12241fa91f059bb5a873e9158ca44b33","name":"@arachnodex/job-link-issues","dist-tags":{"latest":"1.0.11"},"versions":{"1.0.0":{"name":"@arachnodex/job-link-issues","version":"1.0.0","keywords":["arachnodex","crawler","broken links","link checker","seo"],"author":{"name":"Rick Kukiela","email":"rick@belniakmedia.com"},"license":"Apache-2.0","_id":"@arachnodex/job-link-issues@1.0.0","maintainers":[{"name":"rickkukiela","email":"rick@belniakmedia.com"}],"homepage":"https://github.com/Arachnodex/arachnodex#readme","bugs":{"url":"https://github.com/Arachnodex/arachnodex/issues"},"dist":{"shasum":"f2a44936e7c2a1c31bcc5ed2d95e3035340667c5","tarball":"https://registry.npmjs.org/@arachnodex/job-link-issues/-/job-link-issues-1.0.0.tgz","fileCount":9,"integrity":"sha512-RZUBN9q0HTHUOcldIvvhagPSJYjgYVue/WpLu99F0lm9UdqPl0abCFwVy0ZGTCLdI2TeLb7JwNg2r2fioAZJOg==","signatures":[{"sig":"MEUCIQDg/57fXj1E3m1JlJxD1pErXbyAuGBNp0BtnrByHr5gUAIgL+3974K58jGsO8MKDk/8UuaIqG+mUGcjLntLGUYX6k4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206516},"main":"bin/index.js","type":"module","types":"types/index.d.ts","engines":{"node":">=22.13.0 <25"},"exports":{".":{"types":"./types/index.d.ts","default":"./bin/index.js","development":"./src/index.ts"},"./config/link-issues.example.json":"./config/link-issues.example.json"},"gitHead":"4d3eab58d0a7eb494435ad9e499a1cee2bb21300","scripts":{"build":"npm run clean:bin && npm run clean:types && esbuild src/index.ts --bundle --platform=node --format=esm --target=node22 --minify --packages=external --outfile=bin/index.js && npm run build:types","clean:bin":"node -e \"const fs=require('node:fs'); fs.rmSync('bin',{recursive:true,force:true}); fs.mkdirSync('bin',{recursive:true});\"","build:types":"tsc -p tsconfig.types.json","clean:types":"node -e \"const fs=require('node:fs'); fs.rmSync('types',{recursive:true,force:true});\""},"_npmUser":{"name":"rickkukiela","email":"rick@belniakmedia.com"},"repository":{"url":"git+https://github.com/Arachnodex/arachnodex.git","type":"git","directory":"packages/job-link-issues"},"_npmVersion":"11.13.0","description":"Arachnodex job for reporting crawl link issues.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"axios":"^1.12.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^5.6.3","@types/node":"^22","@arachnodex/core":"^1.0.0"},"peerDependencies":{"@arachnodex/core":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/job-link-issues_1.0.0_1780031436842_0.3921046593840254","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@arachnodex/job-link-issues","version":"1.0.1","keywords":["arachnodex","crawler","broken links","link checker","seo"],"author":{"name":"Rick Kukiela","email":"rick@belniakmedia.com"},"license":"Apache-2.0","_id":"@arachnodex/job-link-issues@1.0.1","maintainers":[{"name":"rickkukiela","email":"rick@belniakmedia.com"}],"homepage":"https://github.com/Arachnodex/arachnodex#readme","bugs":{"url":"https://github.com/Arachnodex/arachnodex/issues"},"dist":{"shasum":"69e940bafc21a492d7af02fc77cb32b3fd51004e","tarball":"https://registry.npmjs.org/@arachnodex/job-link-issues/-/job-link-issues-1.0.1.tgz","fileCount":9,"integrity":"sha512-eFjpxqmN6w7fskOWsttZ79M1y3KDo+sIkTFYBFO8dU4D4rNWyFCIjuM/UGohgZSmMkwzKUT5hoOLMIo/aYAvnA==","signatures":[{"sig":"MEYCIQD9gZ/Du4EWjzfUKLmZkSeWUTPYw5iSkO5KVk5hSMWYQQIhAKPmytQj+s3ye6yD4n73Qtw/I0POXQkVUhA7OPc59orE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206516},"main":"bin/index.js","type":"module","types":"types/index.d.ts","engines":{"node":">=22.13.0 <25"},"exports":{".":{"types":"./types/index.d.ts","default":"./bin/index.js","development":"./src/index.ts"},"./config/link-issues.example.json":"./config/link-issues.example.json"},"gitHead":"3b454aa834f9977fcb5cadcb0f2b4481a5750f82","scripts":{"build":"npm run clean:bin && npm run clean:types && esbuild src/index.ts --bundle --platform=node --format=esm --target=node22 --minify --packages=external --outfile=bin/index.js && npm run build:types","clean:bin":"node -e \"const fs=require('node:fs'); fs.rmSync('bin',{recursive:true,force:true}); fs.mkdirSync('bin',{recursive:true});\"","build:types":"tsc -p tsconfig.types.json","clean:types":"node -e \"const fs=require('node:fs'); fs.rmSync('types',{recursive:true,force:true});\""},"_npmUser":{"name":"rickkukiela","email":"rick@belniakmedia.com"},"repository":{"url":"git+https://github.com/Arachnodex/arachnodex.git","type":"git","directory":"packages/job-link-issues"},"_npmVersion":"11.13.0","description":"Arachnodex job for reporting crawl link issues.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"axios":"^1.12.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^5.6.3","@types/node":"^22","@arachnodex/core":"^1.0.1"},"peerDependencies":{"@arachnodex/core":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/job-link-issues_1.0.1_1780034144208_0.9084230300238629","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@arachnodex/job-link-issues","version":"1.0.2","keywords":["arachnodex","crawler","broken links","link checker","seo"],"author":{"name":"Rick Kukiela","email":"rick@belniakmedia.com"},"license":"Apache-2.0","_id":"@arachnodex/job-link-issues@1.0.2","maintainers":[{"name":"rickkukiela","email":"rick@belniakmedia.com"}],"homepage":"https://github.com/Arachnodex/arachnodex#readme","bugs":{"url":"https://github.com/Arachnodex/arachnodex/issues"},"dist":{"shasum":"7f5ce1bd50ac58a3aea1c7a19248c0cebdbd8ba9","tarball":"https://registry.npmjs.org/@arachnodex/job-link-issues/-/job-link-issues-1.0.2.tgz","fileCount":9,"integrity":"sha512-YOu99dBBPR7zYliXKrLRkLTDkh3uuijwhWHoW7cv5liBPK+4mvCQb7ujsbTavOv+uLF/ViXIFa96fsFFS3I/4Q==","signatures":[{"sig":"MEQCIGgA6hq9i30oHjLKbJvMIyDs1TkziwaYCpWp0W+woQAoAiBijK+VLYS3BRl4hlvIf7Z9SzSMBJE/91NcSFnxxMHdvw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":217304},"main":"bin/index.js","type":"module","types":"types/index.d.ts","engines":{"node":">=22.13.0 <25"},"exports":{".":{"types":"./types/index.d.ts","default":"./bin/index.js","development":"./src/index.ts"},"./config/link-issues.example.json":"./config/link-issues.example.json"},"gitHead":"f182a55ffac726141405b352ad31d4db987cdc83","scripts":{"build":"npm run clean:bin && npm run clean:types && esbuild src/index.ts --bundle --platform=node --format=esm --target=node22 --minify --packages=external --outfile=bin/index.js && npm run build:types","clean:bin":"node -e \"const fs=require('node:fs'); fs.rmSync('bin',{recursive:true,force:true}); fs.mkdirSync('bin',{recursive:true});\"","build:types":"tsc -p tsconfig.types.json","clean:types":"node -e \"const fs=require('node:fs'); fs.rmSync('types',{recursive:true,force:true});\""},"_npmUser":{"name":"rickkukiela","email":"rick@belniakmedia.com"},"repository":{"url":"git+https://github.com/Arachnodex/arachnodex.git","type":"git","directory":"packages/job-link-issues"},"_npmVersion":"11.13.0","description":"Arachnodex job for reporting crawl link issues.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"axios":"^1.12.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^5.6.3","@types/node":"^22","@arachnodex/core":"^1.0.4"},"peerDependencies":{"@arachnodex/core":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/job-link-issues_1.0.2_1780451998306_0.04320057068238725","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@arachnodex/job-link-issues","version":"1.0.3","keywords":["arachnodex","crawler","broken links","link checker","seo"],"author":{"name":"Rick Kukiela","email":"rick@belniakmedia.com"},"license":"Apache-2.0","_id":"@arachnodex/job-link-issues@1.0.3","maintainers":[{"name":"rickkukiela","email":"rick@belniakmedia.com"}],"homepage":"https://github.com/Arachnodex/arachnodex#readme","bugs":{"url":"https://github.com/Arachnodex/arachnodex/issues"},"dist":{"shasum":"1fb6d46162cdacc4c1199a0d12c9857ec544853f","tarball":"https://registry.npmjs.org/@arachnodex/job-link-issues/-/job-link-issues-1.0.3.tgz","fileCount":9,"integrity":"sha512-IYpVOU+7iOamhHnaMabsosd3mhmDfoU8KyZly3tmOEcdNhYA1T5BMFPWBpcHYFqf9WWbZqwDBvX7bY5tmRfAtQ==","signatures":[{"sig":"MEUCIQDmPjanOGim72hoz+KD3eP8KqUkm291g7RAcn3+GZZcjAIgJoDgrh+UHe2oMevg1oEiQvmRi2+/Bx/ElATXCgGHIWE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226894},"main":"bin/index.js","type":"module","types":"types/index.d.ts","engines":{"node":">=22.13.0 <25"},"exports":{".":{"types":"./types/index.d.ts","default":"./bin/index.js","development":"./src/index.ts"},"./config/link-issues.example.json":"./config/link-issues.example.json"},"gitHead":"366882216108b29e466e9fe7c9e0c81ddf3b7062","scripts":{"build":"npm run clean:bin && npm run clean:types && esbuild src/index.ts --bundle --platform=node --format=esm --target=node22 --minify --packages=external --outfile=bin/index.js && npm run build:types","clean:bin":"node -e \"const fs=require('node:fs'); fs.rmSync('bin',{recursive:true,force:true}); fs.mkdirSync('bin',{recursive:true});\"","build:types":"tsc -p tsconfig.types.json","clean:types":"node -e \"const fs=require('node:fs'); fs.rmSync('types',{recursive:true,force:true});\""},"_npmUser":{"name":"rickkukiela","email":"rick@belniakmedia.com"},"repository":{"url":"git+https://github.com/Arachnodex/arachnodex.git","type":"git","directory":"packages/job-link-issues"},"_npmVersion":"11.13.0","description":"Arachnodex job for reporting crawl link issues.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"axios":"^1.12.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^5.6.3","@types/node":"^22","@arachnodex/core":"^1.0.4"},"peerDependencies":{"@arachnodex/core":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/job-link-issues_1.0.3_1780526379865_0.37592422647445134","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@arachnodex/job-link-issues","version":"1.0.4","keywords":["arachnodex","crawler","broken links","link checker","seo"],"author":{"name":"Rick Kukiela","email":"rick@belniakmedia.com"},"license":"Apache-2.0","_id":"@arachnodex/job-link-issues@1.0.4","maintainers":[{"name":"rickkukiela","email":"rick@belniakmedia.com"}],"homepage":"https://github.com/Arachnodex/arachnodex#readme","bugs":{"url":"https://github.com/Arachnodex/arachnodex/issues"},"dist":{"shasum":"210d3405e4bdf040f5b2749909b225ad8b20dc8d","tarball":"https://registry.npmjs.org/@arachnodex/job-link-issues/-/job-link-issues-1.0.4.tgz","fileCount":9,"integrity":"sha512-SFdKS0ObXKebuNWBIgLFRCZhvOjpGIcW2/1UO9w4Dr0tIWhR8fM9nDBX+kTm9iGVW+lTUbJg5DICfvu3uGY/oA==","signatures":[{"sig":"MEUCIQD2p0UEep9qCseVjh6OC3nWUJhFnum/OhfHoMDREAgEvwIgeJn8bLXIlj3MpR8G2H4DTPT/EI9P5qVe2+8wBZ3V1Lo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":233101},"main":"bin/index.js","type":"module","types":"types/index.d.ts","engines":{"node":">=22.13.0 <25"},"exports":{".":{"types":"./types/index.d.ts","default":"./bin/index.js","development":"./src/index.ts"},"./config/link-issues.example.json":"./config/link-issues.example.json"},"gitHead":"ec64588bb4a0ec3c22e2ea7d073b167ab121e7f3","scripts":{"build":"npm run clean:bin && npm run clean:types && esbuild src/index.ts --bundle --platform=node --format=esm --target=node22 --minify --packages=external --outfile=bin/index.js && npm run build:types","clean:bin":"node -e \"const fs=require('node:fs'); fs.rmSync('bin',{recursive:true,force:true}); fs.mkdirSync('bin',{recursive:true});\"","build:types":"tsc -p tsconfig.types.json","clean:types":"node -e \"const fs=require('node:fs'); fs.rmSync('types',{recursive:true,force:true});\""},"_npmUser":{"name":"rickkukiela","email":"rick@belniakmedia.com"},"repository":{"url":"git+https://github.com/Arachnodex/arachnodex.git","type":"git","directory":"packages/job-link-issues"},"_npmVersion":"11.13.0","description":"Arachnodex job for reporting crawl link issues.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"axios":"^1.12.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^5.6.3","@types/node":"^22","@arachnodex/core":"^1.0.6"},"peerDependencies":{"@arachnodex/core":"^1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/job-link-issues_1.0.4_1780606341370_0.3744244214083874","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@arachnodex/job-link-issues","version":"1.0.5","keywords":["arachnodex","crawler","broken links","link checker","seo"],"author":{"name":"Rick Kukiela","email":"rick@belniakmedia.com"},"license":"Apache-2.0","_id":"@arachnodex/job-link-issues@1.0.5","maintainers":[{"name":"rickkukiela","email":"rick@belniakmedia.com"}],"homepage":"https://github.com/Arachnodex/arachnodex#readme","bugs":{"url":"https://github.com/Arachnodex/arachnodex/issues"},"dist":{"shasum":"c881ed1d7f09794c1d4773917b182c1c49ef0940","tarball":"https://registry.npmjs.org/@arachnodex/job-link-issues/-/job-link-issues-1.0.5.tgz","fileCount":9,"integrity":"sha512-58L2FgE60COv1D1NfqpoNWaXaZzYAdmL0ayohrekj1P3gOrZu/4DqFlmorYq5lc3hOPDvh54UsfhqopMyv1v4Q==","signatures":[{"sig":"MEYCIQDBVyzmhWWAxIQG+iKEKX04XZDl5iKz1kOV6EHE0uWj2AIhAPmPoAMsD6KNWInOFI06FyppZonTeUg4Z/dwruKjmqxX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":295682},"main":"bin/index.js","type":"module","types":"types/index.d.ts","engines":{"node":">=22.13.0 <25"},"exports":{".":{"types":"./types/index.d.ts","default":"./bin/index.js","development":"./src/index.ts"},"./config/link-issues.example.json":"./config/link-issues.example.json"},"gitHead":"b0e3b30f375340d5ad0bf99deb84d976a51a7bc2","scripts":{"build":"npm run clean:bin && npm run clean:types && esbuild src/index.ts --bundle --platform=node --format=esm --target=node22 --minify --packages=external --outfile=bin/index.js && npm run build:types","clean:bin":"node -e \"const fs=require('node:fs'); fs.rmSync('bin',{recursive:true,force:true}); fs.mkdirSync('bin',{recursive:true});\"","build:types":"tsc -p tsconfig.types.json","clean:types":"node -e \"const fs=require('node:fs'); fs.rmSync('types',{recursive:true,force:true});\""},"_npmUser":{"name":"rickkukiela","email":"rick@belniakmedia.com"},"repository":{"url":"git+https://github.com/Arachnodex/arachnodex.git","type":"git","directory":"packages/job-link-issues"},"_npmVersion":"11.13.0","description":"Arachnodex job for reporting crawl link issues.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"axios":"^1.12.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^5.6.3","@types/node":"^22","@arachnodex/core":"^1.0.7"},"peerDependencies":{"@arachnodex/core":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/job-link-issues_1.0.5_1780682621504_0.25616214001630944","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@arachnodex/job-link-issues","version":"1.0.6","keywords":["arachnodex","crawler","broken links","link checker","seo"],"author":{"name":"Rick Kukiela","email":"rick@belniakmedia.com"},"license":"Apache-2.0","_id":"@arachnodex/job-link-issues@1.0.6","maintainers":[{"name":"rickkukiela","email":"rick@belniakmedia.com"}],"homepage":"https://github.com/Arachnodex/arachnodex#readme","bugs":{"url":"https://github.com/Arachnodex/arachnodex/issues"},"dist":{"shasum":"06d22e9b793e62c1b541419b0dcea030be6ac4b2","tarball":"https://registry.npmjs.org/@arachnodex/job-link-issues/-/job-link-issues-1.0.6.tgz","fileCount":9,"integrity":"sha512-DDdlZi5DW2e5klLJM5r2fC5CXbmgYPgWbK4KvDZf+LZOUmlawVINKUPuTYzZQc8hhKWyGX2lZEIB9No7+JV+Lw==","signatures":[{"sig":"MEUCIQDa9S7ZNByqQEFi9aXhF+9Kh7RY6tH+E2YHSbxv9W4dIwIgflzsijNiugjSrAqVKZOSmQaMLf2CkcwfH3UnafKowMk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296472},"main":"bin/index.js","type":"module","types":"types/index.d.ts","engines":{"node":">=22.13.0 <25"},"exports":{".":{"types":"./types/index.d.ts","default":"./bin/index.js","development":"./src/index.ts"},"./config/link-issues.example.json":"./config/link-issues.example.json"},"gitHead":"b0e3b30f375340d5ad0bf99deb84d976a51a7bc2","scripts":{"build":"npm run clean:bin && npm run clean:types && esbuild src/index.ts --bundle --platform=node --format=esm --target=node22 --minify --packages=external --outfile=bin/index.js && npm run build:types","clean:bin":"node -e \"const fs=require('node:fs'); fs.rmSync('bin',{recursive:true,force:true}); fs.mkdirSync('bin',{recursive:true});\"","build:types":"tsc -p tsconfig.types.json","clean:types":"node -e \"const fs=require('node:fs'); fs.rmSync('types',{recursive:true,force:true});\""},"_npmUser":{"name":"rickkukiela","email":"rick@belniakmedia.com"},"repository":{"url":"git+https://github.com/Arachnodex/arachnodex.git","type":"git","directory":"packages/job-link-issues"},"_npmVersion":"11.13.0","description":"Arachnodex job for reporting crawl link issues.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"axios":"^1.12.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^5.6.3","@types/node":"^22","@arachnodex/core":"^1.0.7"},"peerDependencies":{"@arachnodex/core":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/job-link-issues_1.0.6_1781042497988_0.042591655408905194","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@arachnodex/job-link-issues","version":"1.0.7","keywords":["arachnodex","crawler","broken links","link checker","seo"],"author":{"name":"Rick Kukiela","email":"rick@belniakmedia.com"},"license":"Apache-2.0","_id":"@arachnodex/job-link-issues@1.0.7","maintainers":[{"name":"rickkukiela","email":"rick@belniakmedia.com"}],"homepage":"https://github.com/Arachnodex/arachnodex#readme","bugs":{"url":"https://github.com/Arachnodex/arachnodex/issues"},"dist":{"shasum":"5dd13305b7d06466144d56da89a9b300e3bb37d0","tarball":"https://registry.npmjs.org/@arachnodex/job-link-issues/-/job-link-issues-1.0.7.tgz","fileCount":9,"integrity":"sha512-TXOli8lQWBqf8jv7OMvn8kHoTNzJv4VKqB8xoz38PGh4wMMzT9jqM5gpLLyu3PQxvCZyIbd9JXH/Keo1Lb12Kg==","signatures":[{"sig":"MEUCIQCInKYO3A5SO3uELECxHKLGCzYPPLsQch60CtYefk73qwIgZzd35sVKVGf7mLTyxeNaGI0lqvvP7C8xqEYPEVAQ0/E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298362},"main":"bin/index.js","type":"module","types":"types/index.d.ts","engines":{"node":">=22.13.0 <25"},"exports":{".":{"types":"./types/index.d.ts","default":"./bin/index.js","development":"./src/index.ts"},"./config/link-issues.example.json":"./config/link-issues.example.json"},"gitHead":"d58d41f13c38355d2bb3c35d1b8c6612d1506fa2","scripts":{"test":"node --conditions=development --import tsx test/*.test.ts","build":"npm run clean:bin && npm run clean:types && esbuild src/index.ts --bundle --platform=node --format=esm --target=node22 --minify --packages=external --outfile=bin/index.js && npm run build:types","clean:bin":"node -e \"const fs=require('node:fs'); fs.rmSync('bin',{recursive:true,force:true}); fs.mkdirSync('bin',{recursive:true});\"","build:types":"tsc -p tsconfig.types.json","clean:types":"node -e \"const fs=require('node:fs'); fs.rmSync('types',{recursive:true,force:true});\""},"_npmUser":{"name":"rickkukiela","email":"rick@belniakmedia.com"},"repository":{"url":"git+https://github.com/Arachnodex/arachnodex.git","type":"git","directory":"packages/job-link-issues"},"_npmVersion":"11.13.0","description":"Arachnodex job for reporting crawl link issues.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"axios":"^1.12.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^5.6.3","@types/node":"^22","@arachnodex/core":"^1.0.7"},"peerDependencies":{"@arachnodex/core":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/job-link-issues_1.0.7_1781300439254_0.2700395670824667","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@arachnodex/job-link-issues","version":"1.0.8","keywords":["arachnodex","crawler","broken links","link checker","seo"],"author":{"name":"Rick Kukiela","email":"rick@belniakmedia.com"},"license":"Apache-2.0","_id":"@arachnodex/job-link-issues@1.0.8","maintainers":[{"name":"rickkukiela","email":"rick@belniakmedia.com"}],"homepage":"https://github.com/Arachnodex/arachnodex#readme","bugs":{"url":"https://github.com/Arachnodex/arachnodex/issues"},"dist":{"shasum":"5c2fb9e275c78580f0055a599c4c9144c7344118","tarball":"https://registry.npmjs.org/@arachnodex/job-link-issues/-/job-link-issues-1.0.8.tgz","fileCount":9,"integrity":"sha512-2/aMCsQJzJa/z08fCPQk1BpRTiSEdebJ84qElshfdkrf0xsJGZHcaQhmC3spZEe3ieUr5Lczb0yoDcYzTYEJuQ==","signatures":[{"sig":"MEQCIEGaYAAiXIRvOxJ9n+pCdPeOxJIqqozYmglvmMmwMXRnAiByw3M2OUVH4bAwWYdOCQoutEgdJ5dQk2Erfwn77Cm7kg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298607},"main":"bin/index.js","type":"module","types":"types/index.d.ts","engines":{"node":">=22.13.0 <25"},"exports":{".":{"types":"./types/index.d.ts","default":"./bin/index.js","development":"./src/index.ts"},"./config/link-issues.example.json":"./config/link-issues.example.json"},"gitHead":"292bf44b356aa48f66097b59644f2ef3f0cd3135","scripts":{"test":"node --conditions=development --import tsx test/*.test.ts","build":"npm run clean:bin && npm run clean:types && esbuild src/index.ts --bundle --platform=node --format=esm --target=node22 --minify --packages=external --outfile=bin/index.js && npm run build:types","clean:bin":"node -e \"const fs=require('node:fs'); fs.rmSync('bin',{recursive:true,force:true}); fs.mkdirSync('bin',{recursive:true});\"","build:types":"tsc -p tsconfig.types.json","clean:types":"node -e \"const fs=require('node:fs'); fs.rmSync('types',{recursive:true,force:true});\""},"_npmUser":{"name":"rickkukiela","email":"rick@belniakmedia.com"},"repository":{"url":"git+https://github.com/Arachnodex/arachnodex.git","type":"git","directory":"packages/job-link-issues"},"_npmVersion":"11.13.0","description":"Arachnodex job for reporting crawl link issues.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"axios":"^1.12.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^5.6.3","@types/node":"^22","@arachnodex/core":"^1.0.7"},"peerDependencies":{"@arachnodex/core":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/job-link-issues_1.0.8_1781728934398_0.6347868491629671","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@arachnodex/job-link-issues","version":"1.0.9","keywords":["arachnodex","crawler","broken links","link checker","seo"],"author":{"name":"Rick Kukiela","email":"rick@belniakmedia.com"},"license":"Apache-2.0","_id":"@arachnodex/job-link-issues@1.0.9","maintainers":[{"name":"rickkukiela","email":"rick@belniakmedia.com"}],"homepage":"https://github.com/Arachnodex/arachnodex#readme","bugs":{"url":"https://github.com/Arachnodex/arachnodex/issues"},"dist":{"shasum":"59159b9d5aa8ca7c20876851a81c40f762ebdc04","tarball":"https://registry.npmjs.org/@arachnodex/job-link-issues/-/job-link-issues-1.0.9.tgz","fileCount":9,"integrity":"sha512-+PtSmwbtdsbjv4STXpkOHvsxzuQXQFBGliYTfXGtikcuQSxD9RTOiwKN3dwjdnN+W89dB2Y5MNVYbHEdi46jvw==","signatures":[{"sig":"MEQCIFBRQd3VYLkzN78sExZNX+Hzj/JHJ1bC4nXaqUYhgKGtAiBa5Pk8E6YAAPrmuX8K/tk78MDRVo/ZCoYSGG5giFq4Lw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":300047},"main":"bin/index.js","type":"module","types":"types/index.d.ts","engines":{"node":">=22.13.0 <25"},"exports":{".":{"types":"./types/index.d.ts","default":"./bin/index.js","development":"./src/index.ts"},"./config/link-issues.example.json":"./config/link-issues.example.json"},"gitHead":"0e7ce7f80e6454376dee1297aaa6f510dd9b827f","scripts":{"test":"node --conditions=development --import tsx test/*.test.ts","build":"npm run clean:bin && npm run clean:types && esbuild src/index.ts --bundle --platform=node --format=esm --target=node22 --minify --packages=external --outfile=bin/index.js && npm run build:types","clean:bin":"node -e \"const fs=require('node:fs'); fs.rmSync('bin',{recursive:true,force:true}); fs.mkdirSync('bin',{recursive:true});\"","build:types":"tsc -p tsconfig.types.json","clean:types":"node -e \"const fs=require('node:fs'); fs.rmSync('types',{recursive:true,force:true});\""},"_npmUser":{"name":"rickkukiela","email":"rick@belniakmedia.com"},"repository":{"url":"git+https://github.com/Arachnodex/arachnodex.git","type":"git","directory":"packages/job-link-issues"},"_npmVersion":"11.13.0","description":"Arachnodex job for reporting crawl link issues.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"axios":"^1.12.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^5.6.3","@types/node":"^22","@arachnodex/core":"^1.0.7"},"peerDependencies":{"@arachnodex/core":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/job-link-issues_1.0.9_1784824856860_0.3050243109170321","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@arachnodex/job-link-issues","version":"1.0.10","keywords":["arachnodex","crawler","broken links","link checker","seo"],"author":{"name":"Rick Kukiela","email":"rick@belniakmedia.com"},"license":"Apache-2.0","_id":"@arachnodex/job-link-issues@1.0.10","maintainers":[{"name":"rickkukiela","email":"rick@belniakmedia.com"}],"homepage":"https://github.com/Arachnodex/arachnodex#readme","bugs":{"url":"https://github.com/Arachnodex/arachnodex/issues"},"dist":{"shasum":"6b988df870f08b0f53117a974adb4371aec1fa35","tarball":"https://registry.npmjs.org/@arachnodex/job-link-issues/-/job-link-issues-1.0.10.tgz","fileCount":9,"integrity":"sha512-/Y97aKdgGVPqWyeXLHNxv6xXX+X9Eua/vTHiYdwQe8NVjT9dfqqTjm+hPKpU/YFyOoqED4IHLmPgaiKXh/nh6Q==","signatures":[{"sig":"MEQCIBD/FTzMWO0ICTDjJPolP4APvgWUipzT04OPaQNM5bhKAiAajMLr//+X5FoI0EFDC3mjan/VuVaCnU47BHpBunzDwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arachnodex%2fjob-link-issues@1.0.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":317514},"main":"bin/index.js","type":"module","types":"types/index.d.ts","engines":{"node":">=22.13.0 <25"},"exports":{".":{"types":"./types/index.d.ts","default":"./bin/index.js","development":"./src/index.ts"},"./config/link-issues.example.json":"./config/link-issues.example.json"},"gitHead":"56d075dd0cd42082f51c6aa5a85d4ebbe373178c","scripts":{"test":"node --conditions=development --import tsx test/*.test.ts","build":"npm run clean:bin && npm run clean:types && esbuild src/index.ts --bundle --platform=node --format=esm --target=node22 --minify --packages=external --outfile=bin/index.js && npm run build:types","clean:bin":"node -e \"const fs=require('node:fs'); fs.rmSync('bin',{recursive:true,force:true}); fs.mkdirSync('bin',{recursive:true});\"","build:types":"tsc -p tsconfig.types.json","clean:types":"node -e \"const fs=require('node:fs'); fs.rmSync('types',{recursive:true,force:true});\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3ecab207-be44-4b61-b15d-69c3c7ab970a"}},"repository":{"url":"git+https://github.com/Arachnodex/arachnodex.git","type":"git","directory":"packages/job-link-issues"},"_npmVersion":"11.19.1","description":"Arachnodex job for reporting crawl link issues.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"axios":"^1.20.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^5.6.3","@types/node":"^22","@arachnodex/core":"^1.0.10"},"peerDependencies":{"@arachnodex/core":"^1.0.10"},"_npmOperationalInternal":{"tmp":"tmp/job-link-issues_1.0.10_1788284415410_0.0260267753925294","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@arachnodex/job-link-issues","version":"1.0.11","description":"Arachnodex job for reporting crawl link issues.","type":"module","main":"bin/index.js","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","development":"./src/index.ts","default":"./bin/index.js"},"./config/link-issues.example.json":"./config/link-issues.example.json"},"repository":{"type":"git","url":"git+https://github.com/Arachnodex/arachnodex.git","directory":"packages/job-link-issues"},"keywords":["arachnodex","crawler","broken links","link checker","seo"],"author":{"name":"Rick Kukiela","email":"rick@belniakmedia.com"},"license":"Apache-2.0","bugs":{"url":"https://github.com/Arachnodex/arachnodex/issues"},"homepage":"https://github.com/Arachnodex/arachnodex#readme","publishConfig":{"access":"public"},"scripts":{"clean:bin":"node -e \"const fs=require('node:fs'); fs.rmSync('bin',{recursive:true,force:true}); fs.mkdirSync('bin',{recursive:true});\"","clean:types":"node -e \"const fs=require('node:fs'); fs.rmSync('types',{recursive:true,force:true});\"","build:types":"tsc -p tsconfig.types.json","test":"node --conditions=development --import tsx test/*.test.ts","build":"npm run clean:bin && npm run clean:types && esbuild src/index.ts --bundle --platform=node --format=esm --target=node22 --minify --packages=external --outfile=bin/index.js && npm run build:types"},"dependencies":{"axios":"^1.20.0"},"peerDependencies":{"@arachnodex/core":"^1.0.12"},"devDependencies":{"@arachnodex/core":"^1.0.12","@types/node":"^22","esbuild":"^0.25.0","typescript":"^5.6.3"},"engines":{"node":">=22.13.0 <25"},"gitHead":"26dcf5eac8a87bde5b3b274fba3a6f82776e0bfd","_id":"@arachnodex/job-link-issues@1.0.11","_nodeVersion":"24.16.0","_npmVersion":"11.19.1","dist":{"integrity":"sha512-aB8AhHg8CWty2nFS+icVD7Vs7erNNVLp2w7uIfKlgAMW3rmAZSY2doFHrvWl8GuC83A4Nc7+4dQ3JI07T6S5RQ==","shasum":"7b6cf7d593ed52ddc8d27e7d0ea8020cab1df999","tarball":"https://registry.npmjs.org/@arachnodex/job-link-issues/-/job-link-issues-1.0.11.tgz","fileCount":9,"unpackedSize":324372,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arachnodex%2fjob-link-issues@1.0.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEexjkXazxVLFGcyMWiCxsiLqXR5pWXW+diP4eXDd2xMAiEAi96Sd0Us+Hg3S3lClMvcFazfa5qLy1nhlf8r1KM9ld8="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3ecab207-be44-4b61-b15d-69c3c7ab970a"}},"directories":{},"maintainers":[{"name":"rickkukiela","email":"rick@belniakmedia.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/job-link-issues_1.0.11_1788304769361_0.7234434887005237"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-29T05:10:36.665Z","modified":"2026-09-01T23:19:29.837Z","1.0.0":"2026-05-29T05:10:36.985Z","1.0.1":"2026-05-29T05:55:44.351Z","1.0.2":"2026-06-03T01:59:58.454Z","1.0.3":"2026-06-03T22:39:40.025Z","1.0.4":"2026-06-04T20:52:21.510Z","1.0.5":"2026-06-05T18:03:41.676Z","1.0.6":"2026-06-09T22:01:38.117Z","1.0.7":"2026-06-12T21:40:39.400Z","1.0.8":"2026-06-17T20:42:14.599Z","1.0.9":"2026-07-23T16:40:57.001Z","1.0.10":"2026-09-01T17:40:15.602Z","1.0.11":"2026-09-01T23:19:29.526Z"},"bugs":{"url":"https://github.com/Arachnodex/arachnodex/issues"},"author":{"name":"Rick Kukiela","email":"rick@belniakmedia.com"},"license":"Apache-2.0","homepage":"https://github.com/Arachnodex/arachnodex#readme","keywords":["arachnodex","crawler","broken links","link checker","seo"],"repository":{"type":"git","url":"git+https://github.com/Arachnodex/arachnodex.git","directory":"packages/job-link-issues"},"description":"Arachnodex job for reporting crawl link issues.","maintainers":[{"name":"rickkukiela","email":"rick@belniakmedia.com"}],"readme":"# @arachnodex/job-link-issues\n\nThe Link Issues job reports broken, malformed, non-canonical, insecure, placeholder, redirect, fragment, and optional external-link issues found during an Arachnodex crawl.\n\nIt is intended for site cleanup work where grouped, actionable findings are more useful than a raw list of every repeated link occurrence.\n\n## Install\n\nProjects created with `npm create @arachnodex` include this job by default. For a manual install, add it beside `@arachnodex/core`:\n\n```sh\nnpm install @arachnodex/job-link-issues\n```\n\nThe package uses `@arachnodex/core` as a peer dependency, so it should be installed in the same project as the crawler.\n\n## Usage\n\nRun the job with the default crawler config:\n\n```sh\nnpm exec -- arachnodex -c default -j link-issues\n```\n\nRun it with external link checks and notice-level findings:\n\n```sh\nnpm exec -- arachnodex -c default -j link-issues -e -n\n```\n\nRun it with asset checks:\n\n```sh\nnpm exec -- arachnodex -c default -j link-issues -a\n```\n\nAdd `-e` when you also want HEAD-only availability checks for external asset URLs:\n\n```sh\nnpm exec -- arachnodex -c default -j link-issues -a -e\n```\n\nRun it with copy/paste prompt output:\n\n```sh\nnpm exec -- arachnodex -c default -j link-issues -p\n```\n\nWhen available, console reports, email reports, and prompt output include an\n`Anchor HTML` detail with the offending `<a>` element. Anchors with small inner\nHTML are shown exactly; anchors with inner HTML over 128 bytes keep the real\nopening/closing anchor tag but replace the body with a bracketed rendered\ntext/image summary marked as trimmed. This gives patching agents a concrete\nsnippet to search for without flooding reports with large nested markup.\n\nUse a job-specific config by placing `-c` after the job name:\n\n```sh\nnpm exec -- arachnodex -c default -j link-issues -c link-issues\n```\n\nThat loads the crawler config from `config/default.json` and the Link Issues job config from `config/link-issues.json`.\n\n## Config File\n\nThe package example config is available at:\n\n```text\nconfig/link-issues.example.json\n```\n\nA generated Arachnodex project copies this to:\n\n```text\nconfig/link-issues.json\n```\n\nFor a manual install, copy the example into your Arachnodex project's `config/` directory as `link-issues.json` when you want to customize the job settings. The job can run with built-in defaults if no job config file exists.\n\nDefault config:\n\n```json\n{\n  \"emailReportEnabled\": true,\n  \"emailReportTriggerLevels\": [\"error\", \"warning\", \"notice\"],\n  \"includeAssets\": false,\n  \"undesirablePathCharacterPattern\": \"[^\\\\w\\\\-/.]\",\n  \"allowedNonCanonicalLinks\": [],\n  \"ignoredIssuePatterns\": [\n    {\n      \"codes\": [\"external-redirect\"],\n      \"urlPattern\": \"^https?://(?:www\\\\.)?(?:facebook\\\\.com/(?:sharer|share_channel)|linkedin\\\\.com/(?:shareArticle|uas/login)|(?:x|twitter)\\\\.com/(?:intent/tweet|share)|threads\\\\.net/(?:intent/post|share)|bsky\\\\.app/intent/compose|youtu\\\\.be/|youtube\\\\.com/watch|instagram\\\\.com/|goo\\\\.gl/maps/)(?:[?#/].*)?$\"\n    }\n  ]\n}\n```\n\n## Settings\n\n| Setting | Type | Default | Description |\n| --- | --- | --- | --- |\n| `emailReportEnabled` | boolean | `true` | Include the Link Issues job report in Arachnodex report emails. |\n| `emailReportTriggerLevels` | array or `null` | `[\"error\", \"warning\", \"notice\"]` | Severity levels that are allowed to trigger the email report. Valid values are `error`, `warning`, and `notice`. Set to `null` or an empty array to allow the report whenever the job has findings. |\n| `includeAssets` | boolean | `false` | Check asset URLs found in HTML markup and same-site CSS/JS bodies. External asset availability checks require `includeExternal` / `-e`. |\n| `undesirablePathCharacterPattern` | string | `\"[^\\\\w\\\\-/.]\"` | Regular expression used against decoded internal URL paths. Matching paths create notice-level URL path quality findings. |\n| `allowedNonCanonicalLinks` | string[] | `[]` | Path allowlist for internal pages that may point to a different canonical URL without being reported. Entries are compared after the configured `baseUrl` is removed from the normalized canonical target. |\n| `ignoredIssuePatterns` | object[] | social/share `external-redirect` defaults | Suppress matching findings by URL pattern plus optional `codes`, `groups`, and `severities` selectors. Patterns are tested against URL-like issue fields and parsed path/query forms. |\n\nEach `ignoredIssuePatterns` entry supports:\n\n```json\n{\n  \"codes\": [\"external-redirect\"],\n  \"groups\": [\"External Links\"],\n  \"severities\": [\"warning\"],\n  \"statusCodes\": [301, 302],\n  \"urlPattern\": \"^https?://example\\\\.com/expected-redirect(?:[?#/].*)?$\"\n}\n```\n\nThe code, group, severity, and status-code selectors are optional and combine\nwith AND. To suppress only HTTP 429 responses from external link checks across\nall destinations:\n\n```json\n{\n  \"groups\": [\"External Links\"],\n  \"statusCodes\": [429],\n  \"urlPattern\": \".*\"\n}\n```\n\nThe default suppresses only `external-redirect` findings for common social,\nshare, video, and map destinations that frequently redirect by design:\nFacebook, LinkedIn, X/Twitter, Threads, Bluesky, YouTube, Instagram, and Google\nMaps short URLs. Other issue codes for those links still report.\n\nProjects can add their own external redirect ignores for domain-specific\nthird-party destinations, but package defaults and examples intentionally avoid\nniche domains that may be broken or no longer relevant for other integrations.\n\nInternal links whose only canonical mismatch is the query string are reported as\nnotices, not warnings. This catches links such as `/?catalog-request` when the\npage canonical is `/`, while still treating path, host, and protocol canonical\nmismatches as warnings. Use `ignoredIssuePatterns` for known query-driven UI\nstates, campaign parameters, modal triggers, or action flags that should stay\nout of notice output:\n\n```json\n{\n  \"codes\": [\"canonical-query-variant\"],\n  \"urlPattern\": \"^/\\\\?catalog-request$\"\n}\n```\n\n### Issue Codes\n\nUse these values in an `ignoredIssuePatterns` entry's `codes` array when you\nwant the ignore to apply only to specific finding types.\n\n| Area | Codes |\n| --- | --- |\n| Crawl status | `fetch-failed`, `client-error`, `server-error` |\n| Incomplete page audits | `page-audit-incomplete` |\n| Unverified deferred checks | `cross-page-fragment-unverified`, `canonical-target-unverified`, `redirect-final-target-unverified` |\n| Internal HEAD checks | `internal-head-failed` |\n| Internal redirects | `redirect-response`, `redirect-loop`, `redirect-final-target-failed`, `redirect-final-target-unverified`, `redirect-chain`, `redirect-final-target-non-canonical` |\n| External links | `external-redirect`, `external-http-upgrade-available`, `external-error`, `external-bot-protection`, `external-dns-temporary-failure`, `external-fetch-failed` |\n| Asset links | `asset-redirect`, `asset-http-upgrade-available`, `asset-error`, `asset-bot-protection`, `asset-dns-temporary-failure`, `asset-fetch-failed` |\n| Asset security | `insecure-asset-url`, `iframe-missing-sandbox`, `iframe-missing-referrerpolicy`, `malformed-asset-url`, `unsupported-asset-protocol` |\n| Canonical issues | `missing-canonical`, `multiple-canonicals`, `empty-canonical`, `malformed-canonical`, `offsite-canonical`, `http-canonical`, `canonical-query-variant`, `non-canonical-internal-link`, `canonical-target-failed`, `canonical-target-redirects`, `canonical-target-unverified` |\n| Placeholder links | `missing-href`, `empty-href`, `hash-placeholder` |\n| Malformed links | `malformed-href`, `control-character-href` |\n| Unsafe protocols | `javascript-href`, `vbscript-href`, `non-web-protocol` |\n| Internal link hygiene | `insecure-internal-link`, `target-blank-rel` |\n| Fragments and URL quality | `missing-same-page-fragment`, `missing-cross-page-fragment`, `undesirable-path-character` |\n\n## Finding Severity\n\nThe job uses three severity levels:\n\n| Severity | Meaning |\n| --- | --- |\n| `error` | Broken or unsafe behavior that usually needs correction. |\n| `warning` | Risky, unexpected, or SEO-relevant behavior that may be intentional but should be reviewed. |\n| `notice` | Lower-priority cleanup and quality findings. Notice output is hidden unless `-n` is used. |\n\n## Internal HEAD Checks\n\nThe core crawler normally probes each internal URL with HEAD and then uses GET\nto determine its content. If HEAD returns an error status or fails without a\nresponse, GET is used as the fallback and its result remains authoritative for\nthe link's availability. The failed HEAD is also reported separately as a\nwarning with issue code `internal-head-failed`, even when fallback GET succeeds.\nIf GET also fails, both the HEAD warning and the applicable link failure are\nreported.\n\nKnown exceptions can be omitted from this warning with core config patterns.\nPatterns are regular-expression strings matched against the full normalized\ninternal URL:\n\n```json\n{\n  \"requestHead\": {\n    \"enabled\": true,\n    \"failureWarningIgnorePatterns\": [\n      \"^https://www\\\\.example\\\\.com/legacy/\",\n      \"^https://www\\\\.example\\\\.com/api/status$\"\n    ]\n  }\n}\n```\n\nUse `\".*\"` to suppress the warning for the entire site while retaining HEAD\nrequests and GET fallback. Set `requestHead.enabled` to `false` instead when the\nsite should receive GET requests immediately and no internal HEAD requests at\nall. Disabling HEAD also means there are no HEAD-failure warnings to report.\n\n## External Links And Bot Protection\n\nExternal link checks are disabled by default. Enable them with `-e`:\n\n```sh\nnpm exec -- arachnodex -c default -j link-issues -e\n```\n\nThe `-e` switch only controls network verification of external URLs. External\nanchors can still appear in the report without `-e` when they trigger regular\nanchor hygiene findings, such as malformed hrefs, unsafe protocols, or\n`target=\"_blank\"` links missing `rel=\"noopener\"`/`rel=\"noreferrer\"`.\n\nWhen external checks are enabled, the job uses the `@arachnodex/bot-protection-heuristics` package through `@arachnodex/core` to recognize common WAF, CAPTCHA, and browser-challenge responses. Responses that match those markers are reported as notice-level `external-bot-protection` findings instead of broken-link errors because many third-party sites block automated HEAD or GET checks while still serving normal browsers.\n\nUnmatched network failures, timeouts, DNS failures, and ordinary error responses still report as external-link findings such as `external-fetch-failed`, `external-dns-temporary-failure`, or `external-error`; they are not downgraded to bot-protection notices unless the response matches a configured bot-protection marker.\n\nExternal checks use a browser-shaped user agent so third-party sites that reject explicit crawler identifiers can still be verified. This does not change the core crawler's default Arachnodex user agent for normal crawl requests.\n\nCrawler TLS behavior for external HTTPS checks follows the core `requestTls.rejectUnauthorized` setting.\n\n## Asset Links\n\nAsset checks are disabled by default. Enable them with `-a` or config\n`includeAssets: true`. The job keeps asset requests private to Link Issues:\nasset URLs are not added to the shared crawler queue and cannot be emitted by\nthe Sitemap job.\n\nWhen asset checks are enabled, the job inspects common asset references in page\nmarkup, including scripts, stylesheets, images and srcsets, icons, manifests,\nmedia sources, posters, tracks, iframes, embeds, objects, SVG image hrefs,\ninline styles, and common social image/video meta tags. Same-site asset\navailability is checked with HEAD requests. Same-site CSS and JavaScript bodies\nmay be downloaded only after a successful HEAD response so the job can discover\nnested asset URLs such as CSS `url(...)`, `@import`, source maps, and\nconservative JavaScript asset string literals.\n\nExternal asset availability is checked only when external checks are also\nenabled with `-e`. Those checks use HEAD only; external CSS and JavaScript\nbodies are never downloaded or parsed.\n\nAsset checks also report decoded asset URL paths that match\n`undesirablePathCharacterPattern`, HTTPS-page references to HTTP or\nprotocol-relative assets, plus iframe embeds missing `sandbox` or\n`referrerpolicy` attributes.\n\n## Switches\n\n| Switch | Description |\n| --- | --- |\n| `-V`, `--version` | Print the Link Issues job version and exit without crawling. |\n| `-n`, `--include-notices` | Include notice-level findings. By default, only errors and warnings render. |\n| `-e`, `--include-external` | Check external links using HEAD requests with limited fallback behavior. This does not disable normal anchor hygiene reporting for external hrefs when omitted. |\n| `-a`, `--include-assets` | Check asset URLs found in page markup and same-site CSS/JS. External asset availability checks require `-e`. |\n| `-p`, `--prompt` | Output grouped findings as copy/paste prompts for another coding agent. |\n","readmeFilename":"README.md"}