/ package.json
package.json
1 { 2 "name": "333-method-automation", 3 "version": "1.0.0", 4 "description": "Automated SERP→outreach pipeline for local business sites", 5 "main": "src/poc.js", 6 "type": "module", 7 "scripts": { 8 "all": "nice -n 19 node scripts/npm-logger.js all node src/all.js", 9 "keywords": "nice -n 19 node scripts/npm-logger.js keywords node src/cli/keywords.js", 10 "keywords:coverage": "node scripts/npm-logger.js keywords-coverage node scripts/analyze-keyword-coverage.js", 11 "keywords:compare": "node scripts/npm-logger.js keywords-compare node scripts/compare-keywords.js", 12 "keywords:recommend": "node scripts/npm-logger.js keywords-recommend node scripts/recommend-threshold.js", 13 "keywords:expand": "node scripts/npm-logger.js keywords-expand node scripts/expand-low-keyword-countries.js", 14 "serps": "nice -n 19 node scripts/npm-logger.js serps node src/cli/serps.js", 15 "assets": "nice -n 19 node scripts/npm-logger.js assets node src/cli/assets.js", 16 "scoring": "nice -n 19 node scripts/npm-logger.js scoring node src/cli/scoring.js", 17 "rescoring": "nice -n 19 node scripts/npm-logger.js rescoring node src/cli/rescoring.js", 18 "enrich": "nice -n 19 node scripts/npm-logger.js enrich node src/cli/enrich.js", 19 "proposals": "nice -n 19 node scripts/npm-logger.js proposals node src/cli/proposals.js", 20 "outreach": "nice -n 19 node scripts/npm-logger.js outreach node src/cli/outreach.js", 21 "outreach:forms": "nice -n 19 node scripts/npm-logger.js outreach-forms node src/outreach/form.js run", 22 "replies": "nice -n 19 node scripts/npm-logger.js replies node src/cli/replies.js", 23 "reply-processor": "nice -n 19 node scripts/npm-logger.js reply-processor node src/cli/reply-processor.js", 24 "poc": "nice -n 19 node scripts/npm-logger.js poc node src/poc.js", 25 "mvp": "nice -n 19 node scripts/npm-logger.js mvp node src/mvp.js", 26 "process": "nice -n 19 node scripts/npm-logger.js process node src/process.js", 27 "init-db": "node scripts/npm-logger.js init-db node scripts/init-db.js", 28 "db-migrate": "node scripts/npm-logger.js db-migrate node scripts/db-migrate.js", 29 "backfill-keywords": "nice -n 19 node scripts/npm-logger.js backfill-keywords node scripts/backfill-keywords.js", 30 "backfill-screenshots": "nice -n 19 node scripts/npm-logger.js backfill-screenshots node scripts/backfill-screenshots.js", 31 "backfill-regex-contacts": "nice -n 19 node scripts/npm-logger.js backfill-regex-contacts node scripts/backfill-regex-contacts.js", 32 "competitors": "nice -n 19 node scripts/npm-logger.js competitors node src/competitor-analysis.js", 33 "proposals:v2": "nice -n 19 node scripts/npm-logger.js proposals-v2 node src/proposal-generator-v2.js", 34 "retry": "nice -n 19 node scripts/npm-logger.js retry node src/retry-failed.js", 35 "sync-unsubscribes": "nice -n 19 node scripts/npm-logger.js sync-unsubscribes node src/utils/sync-unsubscribes.js", 36 "sync-email-events": "nice -n 19 node scripts/npm-logger.js sync-email-events node src/utils/sync-email-events.js", 37 "sync-daemon": "nice -n 19 node scripts/npm-logger.js sync-daemon node src/sync-daemon.js", 38 "profiles": "node scripts/npm-logger.js profiles node scripts/manage-profiles.js", 39 "pricing:summary": "node scripts/npm-logger.js pricing-summary node src/utils/country-pricing.js summary", 40 "pricing:get": "node scripts/npm-logger.js pricing-get node src/utils/country-pricing.js get", 41 "pricing:tier": "node scripts/npm-logger.js pricing-tier node src/utils/country-pricing.js tier", 42 "pricing:override": "node scripts/npm-logger.js pricing-override node src/utils/country-pricing.js override", 43 "pricing:update": "nice -n 19 node scripts/npm-logger.js pricing-update node src/cron/weekly-repricing.js", 44 "pricing:export": "node scripts/npm-logger.js pricing-export node src/api/pricing-export.js", 45 "cron": "nice -n 19 node scripts/npm-logger.js cron node src/cron.js", 46 "pipeline:service": "nice -n 19 node scripts/npm-logger.js pipeline-service node src/pipeline-service.js", 47 "cron:list": "node scripts/npm-logger.js cron-list node src/cli/cron-manager.js list", 48 "cron:enable": "node scripts/npm-logger.js cron-enable node src/cli/cron-manager.js enable", 49 "cron:disable": "node scripts/npm-logger.js cron-disable node src/cli/cron-manager.js disable", 50 "cron:add": "node scripts/npm-logger.js cron-add node src/cli/cron-manager.js add", 51 "cron:remove": "node scripts/npm-logger.js cron-remove node src/cli/cron-manager.js remove", 52 "cron:logs": "node scripts/npm-logger.js cron-logs node src/cli/cron-manager.js logs", 53 "cron:stats": "node scripts/npm-logger.js cron-stats node src/cli/cron-manager.js stats", 54 "cron:run": "node scripts/npm-logger.js cron-run node scripts/run-cron-job.js", 55 "cron:migrate": "node scripts/npm-logger.js cron-migrate node scripts/migrate-cron-tasks.js", 56 "cron:cleanup-stale": "node scripts/npm-logger.js cron-cleanup-stale node scripts/cleanup-stale-jobs.js", 57 "watchdog:status": "cat /tmp/watchdog-status.txt 2>/dev/null || echo 'No status yet'", 58 "monitor:status": "cat /tmp/watchdog-status.txt 2>/dev/null || echo 'No status yet'", 59 "monitor:guardian": "node -e \"import('./src/cron/process-guardian.js').then(m => m.runProcessGuardian()).then(r => console.log(JSON.stringify(r, null, 2)))\"", 60 "collect-metrics": "node scripts/npm-logger.js collect-metrics node scripts/collect-system-metrics.js", 61 "status": "node src/cli/status.js", 62 "credits": "node src/utils/openrouter-monitor.js", 63 "credits:verbose": "node src/utils/openrouter-monitor.js --verbose", 64 "credits:monitor": "node scripts/npm-logger.js credits-monitor node src/cron/monitor-openrouter-credits.js", 65 "rate-limits": "node scripts/rate-limits.mjs", 66 "rate-limits:clear": "node scripts/rate-limits.mjs --clear", 67 "inbound:poll": "nice -n 19 node scripts/npm-logger.js inbound-poll node src/inbound/processor.js poll", 68 "inbound:process-replies": "nice -n 19 node scripts/npm-logger.js inbound-process-replies node src/inbound/processor.js process-replies", 69 "inbound:inbox": "nice -n 19 node scripts/npm-logger.js inbound-inbox node src/inbound/processor.js inbox", 70 "inbound:thread": "nice -n 19 node scripts/npm-logger.js inbound-thread node src/inbound/processor.js thread", 71 "inbound:stats": "nice -n 19 node scripts/npm-logger.js inbound-stats node src/inbound/processor.js stats", 72 "inbound:email": "nice -n 19 node scripts/npm-logger.js inbound-email node src/inbound/email.js poll", 73 "inbound:sms": "nice -n 19 node scripts/npm-logger.js inbound-sms node src/inbound/sms.js poll", 74 "paypal:create-order": "nice -n 19 node scripts/npm-logger.js paypal-create-order node src/payment/paypal.js create-order", 75 "paypal:verify": "nice -n 19 node scripts/npm-logger.js paypal-verify node src/payment/paypal.js verify", 76 "paypal:webhook": "nice -n 19 node scripts/npm-logger.js paypal-webhook node src/payment/webhook-handler.js server", 77 "paypal:poll": "nice -n 19 node scripts/npm-logger.js paypal-poll node src/payment/poll-paypal-events.js", 78 "report:generate": "node scripts/npm-logger.js report-generate node src/reports/cro-report-generator.js generate", 79 "report:daily": "node scripts/npm-logger.js report-daily node scripts/generate-daily-report.js", 80 "benchmark:contacts": "node scripts/benchmark-contact-extraction.js", 81 "benchmark:captcha": "node scripts/benchmark-captcha-providers.js", 82 "report:pipeline": "node scripts/pipeline-progress-report.js", 83 "export:business-plan": "node scripts/npm-logger.js export-business-plan node scripts/export-business-plan.js", 84 "dedupe": "node scripts/npm-logger.js dedupe node scripts/dedupe-domains.js", 85 "dedupe:dry-run": "node scripts/npm-logger.js dedupe-dry-run node scripts/dedupe-domains.js --dry-run", 86 "dedupe:locale": "node scripts/npm-logger.js dedupe-locale node scripts/dedupe-locale-aware.js", 87 "dedupe:locale:dry-run": "node scripts/npm-logger.js dedupe-locale-dry-run node scripts/dedupe-locale-aware.js --dry-run", 88 "dedupe:outreaches": "node scripts/npm-logger.js dedupe-outreaches node scripts/dedupe-outreaches.js", 89 "dedupe:outreaches:dry-run": "node scripts/npm-logger.js dedupe-outreaches-dry-run node scripts/dedupe-outreaches.js --dry-run", 90 "validate-contacts": "node scripts/npm-logger.js validate-contacts node scripts/validate-contacts.js", 91 "validate:emails": "node scripts/npm-logger.js validate-emails node scripts/validate-email-queue.js --yes", 92 "validate:emails:dry-run": "node scripts/npm-logger.js validate-emails-dry-run node scripts/validate-email-queue.js --dry-run", 93 "zerobounce:credits": "node -e \"import('./src/utils/zerobounce.js').then(m => m.checkCredits()).then(c => console.log('ZeroBounce credits:', c)).catch(e => console.error(e.message))\"", 94 "cleanup:screenshots": "node scripts/npm-logger.js cleanup-screenshots node scripts/cleanup-ignored-screenshots.js", 95 "cleanup:screenshots:dry-run": "node scripts/npm-logger.js cleanup-screenshots-dry-run node scripts/cleanup-ignored-screenshots.js --dry-run", 96 "cleanup:uncropped": "node scripts/npm-logger.js cleanup-uncropped node scripts/delete-all-uncropped.js", 97 "cleanup:uncropped:dry-run": "node scripts/npm-logger.js cleanup-uncropped-dry-run node scripts/delete-all-uncropped.js --dry-run", 98 "cleanup:reset-failing": "node scripts/npm-logger.js cleanup-reset-failing node scripts/reset-failing-sites.js", 99 "cleanup:reset-failing:dry-run": "node scripts/npm-logger.js cleanup-reset-failing-dry-run node scripts/reset-failing-sites.js --dry-run", 100 "dedupe:uncropped": "node scripts/npm-logger.js dedupe-uncropped node scripts/dedupe-uncropped-screenshots.js", 101 "dedupe:uncropped:dry-run": "node scripts/npm-logger.js dedupe-uncropped-dry-run node scripts/dedupe-uncropped-screenshots.js --dry-run", 102 "test:autocrop": "node scripts/npm-logger.js test-autocrop node scripts/test-sharp-autocrop.js", 103 "logs:rotate": "node src/utils/log-rotator.js", 104 "logs:rotate:dry-run": "node src/utils/log-rotator.js --dry-run", 105 "logs:rotate:30d": "node src/utils/log-rotator.js --days=30", 106 "test": "NODE_ENV=test LOGS_DIR=/tmp/test-logs DATABASE_PATH=/tmp/test-sites.db OPS_DB_PATH=/tmp/test-ops.db TEL_DB_PATH=/tmp/test-telemetry.db node_modules/.bin/c8 --reporter=html --reporter=text --reporter=json-summary node --import ./tests/helpers/setup-split-dbs.js --experimental-test-module-mocks --test --test-force-exit --test-concurrency=4 'tests/**/*.test.js'", 107 "posttest": "node scripts/notify-cron.js fullTestSuite", 108 "test:quarantined": "NODE_ENV=test LOGS_DIR=/tmp/test-logs DATABASE_PATH=/tmp/test-sites.db OPS_DB_PATH=/tmp/test-ops.db TEL_DB_PATH=/tmp/test-telemetry.db node --import ./tests/helpers/setup-split-dbs.js --experimental-test-module-mocks --test --test-force-exit '__quarantined_tests__/**/*.test.js'", 109 "test:unit": "NODE_ENV=test LOGS_DIR=/tmp/test-logs DATABASE_PATH=/tmp/test-sites.db node --experimental-test-module-mocks --test --test-concurrency=1 --test-force-exit 'tests/utils/rate-limiter.test.js' 'tests/utils/error-handler.test.js' 'tests/utils/logger.test.js' 'tests/compliance/email-compliance-supplement.test.js' 'tests/compliance/sms-compliance-supplement2.test.js'", 110 "test:integration": "NODE_ENV=test CI=true node --experimental-test-module-mocks --test --test-force-exit 'tests/**/*.integration.test.js' 2>&1 | tee .quality-reports/integration-tap.txt && node scripts/save-test-results.js .quality-reports/integration-tap.txt .quality-reports/integration-test-results.json || true", 111 "test:e2e": "NODE_ENV=test node --test tests/pipeline-e2e.test.js 2>&1 | tee .quality-reports/e2e-tap.txt && node scripts/save-test-results.js .quality-reports/e2e-tap.txt .quality-reports/e2e-test-results.json || true", 112 "test:e2e:sms": "NODE_ENV=test node --experimental-test-module-mocks --test --test-force-exit 'tests/outreach/outreach-sms-loopback.e2e.test.js'", 113 "test:reports": "NODE_ENV=test LOGS_DIR=/tmp/test-logs node --test tests/reports/auditandfix-delivery.test.js", 114 "test:checkout": "NODE_ENV=test node --test tests/e2e/auditandfix-checkout.test.js", 115 "test:geo": "NODE_ENV=test node --test tests/e2e/geo-detection.test.js", 116 "test:prefill": "NODE_ENV=test node --test tests/e2e/prefill-short-url.test.js", 117 "test:scan-nurture": "NODE_ENV=test node --test tests/e2e/scan-email-nurture.test.js", 118 "test:i18n": "NODE_ENV=test node --test tests/website/i18n-keys.test.js", 119 "test:all": "NODE_ENV=test LOGS_DIR=/tmp/test-logs DATABASE_PATH=/tmp/test-sites.db OPS_DB_PATH=/tmp/test-ops.db TEL_DB_PATH=/tmp/test-telemetry.db node_modules/.bin/c8 --reporter=html --reporter=text --reporter=json-summary node --import ./tests/helpers/setup-split-dbs.js --experimental-test-module-mocks --test --test-force-exit --test-concurrency=4 'tests/**/*.test.js' 2>&1 | tee .quality-reports/coverage.txt", 120 "test:watch": "NODE_ENV=test node --experimental-test-module-mocks --test --test-force-exit --watch tests/*.test.js", 121 "test:stealth": "node scripts/test-stealth.js", 122 "test:stealth:minimal": "node scripts/test-stealth.js minimal", 123 "test:stealth:standard": "node scripts/test-stealth.js standard", 124 "test:stealth:aggressive": "node scripts/test-stealth.js aggressive", 125 "test:prompts": "promptfoo eval --config config/promptfoo.yaml", 126 "test:prompts:view": "promptfoo view", 127 "lint": "eslint src/ scripts/", 128 "lint:fix": "eslint src/ scripts/ --fix", 129 "quality-check": "node scripts/quality-check.js", 130 "postquality-check": "node scripts/notify-cron.js unifiedAutofix fullTestSuite", 131 "sage:autofix": "node scripts/sage-auto-fix.js", 132 "autofix": "node scripts/unified-autofix.js", 133 "postautofix": "node scripts/notify-cron.js unifiedAutofix", 134 "autofix:summary": "node scripts/autofix-branch.js summary", 135 "autofix:ensure": "node scripts/autofix-branch.js ensure", 136 "autofix:delete": "node scripts/autofix-branch.js delete", 137 "autofix:logs": "node scripts/log-error-autofix.js", 138 "autofix:logs:dry-run": "node scripts/log-error-autofix.js --dry-run", 139 "coverage:monitor": "node scripts/overnight-coverage-monitor.js", 140 "autofix:logs:today": "node scripts/log-error-autofix.js --days=1", 141 "tests:generate": "node scripts/generate-tests.js", 142 "docs:update": "node scripts/update-stale-docs.js", 143 "security:audit": "node scripts/npm-logger.js security-audit better-npm-audit audit", 144 "security:audit:fix": "node scripts/npm-logger.js security-audit-fix npm audit fix", 145 "security:lint": "node scripts/npm-logger.js security-lint eslint src/ scripts/ --config eslint.config.js", 146 "security:snyk": "node scripts/npm-logger.js security-snyk sh -c 'snyk test --all-projects || true'", 147 "security:snyk:fix": "node scripts/npm-logger.js security-snyk-fix sh -c 'snyk fix || true'", 148 "security:semgrep": "node scripts/npm-logger.js security-semgrep sh -c 'semgrep --config=auto src/ scripts/ --json --output=.security-reports/semgrep.json || true'", 149 "security": "npm run security:audit && npm run security:lint && npm run security:snyk && npm run security:semgrep", 150 "security:fix": "npm run security:audit:fix && npm run lint:fix && npm run security:snyk:fix", 151 "security:scan": "node scripts/npm-logger.js security-scan node scripts/security-scan.js", 152 "security:scan:fix": "node scripts/npm-logger.js security-scan-fix node scripts/security-scan.js --fix", 153 "security:cron": "node scripts/npm-logger.js security-cron node scripts/security-cron.js", 154 "creds:check": "node scripts/check-rotation-schedule.js", 155 "maint:audit": "npm audit && npm outdated && npm test", 156 "maint:quick": "npm audit && npm run lint && npm test", 157 "maint:db": "sqlite3 db/sites.db 'PRAGMA integrity_check;' && sqlite3 db/sites.db 'PRAGMA optimize;'", 158 "maint:claude": "node scripts/npm-logger.js maint-claude node scripts/analyze-claude-md.js", 159 "maint:claude:optimize": "node scripts/npm-logger.js maint-claude-optimize node scripts/optimize-claude-md.js", 160 "maint:analysis": "node scripts/npm-logger.js maint-analysis node scripts/deep-code-analysis.js", 161 "maint:doc-check": "node scripts/npm-logger.js maint-doc-check node scripts/doc-code-check.js", 162 "deps:update": "node scripts/npm-logger.js deps-update node scripts/update-dependencies.js --level=minors", 163 "deps:update:patches": "node scripts/npm-logger.js deps-update-patches node scripts/update-dependencies.js --level=patches", 164 "deps:update:all": "node scripts/npm-logger.js deps-update-all node scripts/update-dependencies.js --level=all", 165 "deps:update:dry-run": "node scripts/npm-logger.js deps-update-dry-run node scripts/update-dependencies.js --level=minors --dry-run", 166 "prepare": "simple-git-hooks", 167 "score-api": "node src/api/free-score-api.js", 168 "scan-poller": "node src/api/free-score-api.js", 169 "dashboard": "source .venv/bin/activate && PYTHONPATH=$PWD python dashboard/run_with_logging.py dashboard/Overview.py", 170 "dashboard:install": "scripts/run-with-logging.sh dashboard-install bash -c 'source .venv/bin/activate && cd dashboard && python -m pip install -r requirements.txt'", 171 "dashboard:test": "scripts/run-with-logging.sh dashboard-test bash -c 'source .venv/bin/activate && PYTHONPATH=$PWD:$PYTHONPATH cd dashboard && pytest tests/'", 172 "dashboard:dev": "source .venv/bin/activate && PYTHONPATH=$PWD python dashboard/run_with_logging.py dashboard/Overview.py --server.runOnSave true", 173 "dashboard:precompute": "node scripts/npm-logger.js dashboard-precompute node src/cron/precompute-dashboard.js", 174 "dashboard:v2-api": "cd dashboard-v2/backend && uvicorn main:app --port 8502 --reload", 175 "dashboard:v2-dev": "cd dashboard-v2/frontend && npm run dev", 176 "dashboard:v2-install": "cd dashboard-v2/frontend && npm install", 177 "dashboard:v2-build": "cd dashboard-v2/frontend && npm run build", 178 "agent:run": "node scripts/npm-logger.js agent-run node src/agents/runner.js", 179 "agent:run:single": "nice -n 19 node src/agents/run-single.js", 180 "agent:list": "node src/cli/agent-manager.js list", 181 "agent:tasks": "node src/cli/agent-manager.js tasks", 182 "agent:logs": "node src/cli/agent-manager.js logs", 183 "agent:create": "node src/cli/agent-manager.js create", 184 "agent:workflow": "node src/cli/agent-manager.js workflow", 185 "agent:approvals": "node src/cli/agent-manager.js approvals", 186 "agent:approve": "node src/cli/agent-manager.js approve", 187 "agent:workflow:status": "node src/cli/agent-manager.js workflow-status", 188 "agent:stats": "node src/cli/agent-manager.js stats", 189 "agent:reset-breakers": "node scripts/npm-logger.js agent-reset-breakers node scripts/reset-agent-circuit-breakers.js", 190 "agent:reset-breakers:dry-run": "node scripts/npm-logger.js agent-reset-breakers-dry-run node scripts/reset-agent-circuit-breakers.js --dry-run", 191 "agent:reset-breakers:force": "node scripts/npm-logger.js agent-reset-breakers-force node scripts/reset-agent-circuit-breakers.js --force --cleanup-tasks", 192 "report:audit": "node scripts/npm-logger.js report-audit node src/reports/report-orchestrator.js", 193 "report:sample": "node scripts/npm-logger.js report-sample node scripts/generate-sample-report.js", 194 "purchases:list": "node scripts/npm-logger.js purchases-list node src/cli/purchases.js list", 195 "purchases:process": "node scripts/npm-logger.js purchases-process node src/cron/process-purchases.js", 196 "purchases:refund": "node scripts/npm-logger.js purchases-refund node src/cli/purchases.js refund" 197 }, 198 "simple-git-hooks": { 199 "pre-commit": "sh scripts/check-pii.sh && sh scripts/check-required-files.sh && npx lint-staged && sh scripts/ai-review.sh", 200 "pre-push": "sh scripts/test-with-clean-env.sh npm run test:unit && npx better-npm-audit audit --level moderate" 201 }, 202 "lint-staged": { 203 "*.{js,mjs,cjs}": [ 204 "eslint --fix" 205 ] 206 }, 207 "keywords": [ 208 "automation", 209 "outreach", 210 "serp", 211 "local-business" 212 ], 213 "author": "", 214 "license": "MIT", 215 "engines": { 216 "node": ">=22.0.0", 217 "npm": ">=10.0.0" 218 }, 219 "dependencies": { 220 "@anthropic-ai/sdk": "^0.71.2", 221 "axios": "^1.13.4", 222 "better-sqlite3": "^12.6.2", 223 "bottleneck": "^2.19.5", 224 "csv-parse": "^6.1.0", 225 "csv-stringify": "^6.6.0", 226 "dataforseo-client": "^2.0.18", 227 "dotenv": "^17.2.3", 228 "express": "^4.22.1", 229 "google-libphonenumber": "^3.2.44", 230 "jsdom": "^28.0.0", 231 "opossum": "^9.0.0", 232 "pdfkit": "^0.15.2", 233 "playwright": "^1.58.2", 234 "playwright-extra": "^4.3.6", 235 "puppeteer-extra-plugin-stealth": "^2.11.2", 236 "resend": "^6.8.0", 237 "sharp": "^0.33.5", 238 "twilio": "^5.12.0", 239 "user-agents": "^1.1.669" 240 }, 241 "devDependencies": { 242 "@eslint/js": "^9.39.2", 243 "@tigtech/sage": "^0.1.0", 244 "better-npm-audit": "^3.11.0", 245 "c8": "^10.1.3", 246 "eslint": "^9.39.2", 247 "eslint-plugin-security": "^3.0.1", 248 "fastest-levenshtein": "^1.0.16", 249 "husky": "^9.1.7", 250 "lint-staged": "^16.2.7", 251 "promptfoo": "^0.121.2", 252 "simple-git-hooks": "^2.13.1" 253 } 254 }