{"_id":"@aledan007/tester","_rev":"8-3003aeeae1c8c3a8d5e6934b689800ac","name":"@aledan007/tester","dist-tags":{"latest":"0.4.5"},"versions":{"0.2.0":{"name":"@aledan007/tester","version":"0.2.0","keywords":["testing","automation","puppeteer","ai","web-testing","accessibility","visual-regression","user-journey","e2e","ux-audit"],"author":{"name":"Alex Danciulescu","email":"alex@techbiz.ae"},"license":"MIT","_id":"@aledan007/tester@0.2.0","maintainers":[{"name":"aledan007","email":"alexdanciulescu@gmail.com"}],"bin":{"tester":"dist/cli/index.js"},"dist":{"shasum":"ddd871aee37a62cc8209bcd2fd75f68c98e7d5db","tarball":"https://registry.npmjs.org/@aledan007/tester/-/tester-0.2.0.tgz","fileCount":14,"integrity":"sha512-G0bfALSwLoxpRJsr9CquH+W6j4aQhWfRbfl3kl7vB7Jw3pnQMhY5nfkQ1T7FBpMf6ir4+Zs9y8pqhPo5kmL1HQ==","signatures":[{"sig":"MEUCIQC1+eMre+TGGO4DHoIh816HTkXmVRQuGSpRG2e3QNOsSwIgBNOfTYrhdPrGYi5sfccsNOpvXg83Oihg7d+BgOPQV1E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1515095},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"c4f0fca748f5ce577e8485c37854cef6e9076618","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","test":"vitest run","build":"tsup","server":"tsx src/server/index.ts","typecheck":"tsc --noEmit","self-audit":"npx playwright test --config self-audit/playwright.config.ts","test:watch":"vitest","start:server":"node dist/server/index.js","prepublishOnly":"npm run build","self-audit:remote":"SELF_AUDIT_URL=https://tester.techbiz.ae npx playwright test --config self-audit/playwright.config.ts"},"_npmUser":{"name":"aledan007","email":"alexdanciulescu@gmail.com"},"_npmVersion":"11.11.0","description":"AI-powered autonomous web testing engine — discover, test, and report on any website","directories":{},"_nodeVersion":"24.14.1","dependencies":{"cors":"^2.8.6","uuid":"^13.0.0","pngjs":"^7.0.0","express":"^5.2.1","otpauth":"^9.0.0","commander":"^13.0.0","puppeteer":"^24.0.0","pixelmatch":"^7.1.0","better-sqlite3":"^12.8.0","@anthropic-ai/sdk":"^0.71.2","@axe-core/puppeteer":"^4.10.0","@types/better-sqlite3":"^7.6.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.9.0","@types/cors":"^2.8.19","@types/node":"^22.0.0","@types/uuid":"^10.0.0","@types/pngjs":"^6.0.5","@types/express":"^5.0.6","@playwright/test":"^1.59.1"},"_npmOperationalInternal":{"tmp":"tmp/tester_0.2.0_1776794395498_0.6682276403921203","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aledan007/tester","version":"0.3.0","keywords":["testing","automation","puppeteer","ai","web-testing","accessibility","visual-regression","user-journey","e2e","ux-audit"],"author":{"name":"Alex Danciulescu","email":"alex@techbiz.ae"},"license":"MIT","_id":"@aledan007/tester@0.3.0","maintainers":[{"name":"aledan007","email":"alexdanciulescu@gmail.com"}],"bin":{"tester":"dist/cli/index.js"},"dist":{"shasum":"641d0a357814924b59f2f0f8d34d674f240d325b","tarball":"https://registry.npmjs.org/@aledan007/tester/-/tester-0.3.0.tgz","fileCount":14,"integrity":"sha512-QcLqChpTUSF/l2XTo+nl6Q/PS2xxwKxYDdK+Su/qQBm4LG1wh9a+TcY1Xt047LqFSQ8Um2YWpLaG49MK9/w0wg==","signatures":[{"sig":"MEYCIQCuJ0pPmuMtmaYUgvvEVJSg7w1zSkO8oCWT82HIPT8RegIhAKEHQ7tZBGeXOQkY02CXD2RZWFSJrdjMXUhcH0stuA8m","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3176662},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"106da1236e967f5dd53af4c877db66151d41b8a7","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","test":"vitest run","build":"tsup","server":"tsx src/server/index.ts","typecheck":"tsc --noEmit","docs:build":"node scripts/build-docs.mjs","docs:serve":"node scripts/build-docs.mjs && npx --yes http-server docs-build -p 4173","self-audit":"npx playwright test --config self-audit/playwright.config.ts","test:watch":"vitest","start:server":"node dist/server/index.js","prepublishOnly":"npm run build","self-audit:remote":"SELF_AUDIT_URL=https://tester.techbiz.ae npx playwright test --config self-audit/playwright.config.ts"},"_npmUser":{"name":"aledan007","email":"alexdanciulescu@gmail.com"},"_npmVersion":"11.11.0","description":"AI-powered autonomous web testing engine — discover, test, and report on any website","directories":{},"_nodeVersion":"24.14.1","dependencies":{"cors":"^2.8.6","uuid":"^13.0.0","pngjs":"^7.0.0","express":"^5.2.1","js-yaml":"^4.1.1","otpauth":"^9.0.0","ts-morph":"^28.0.0","commander":"^13.0.0","puppeteer":"^24.0.0","pixelmatch":"^7.1.0","better-sqlite3":"^12.8.0","@anthropic-ai/sdk":"^0.71.2","@axe-core/puppeteer":"^4.10.0","@types/better-sqlite3":"^7.6.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","marked":"^18.0.2","vitest":"^3.0.0","typescript":"^5.9.0","@types/cors":"^2.8.19","@types/node":"^22.0.0","@types/uuid":"^10.0.0","@types/pngjs":"^6.0.5","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@playwright/test":"^1.59.1"},"_npmOperationalInternal":{"tmp":"tmp/tester_0.3.0_1777883398554_0.678678715967409","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aledan007/tester","version":"0.4.0","keywords":["testing","automation","puppeteer","ai","web-testing","accessibility","visual-regression","user-journey","e2e","ux-audit"],"author":{"name":"Alex Danciulescu","email":"alex@techbiz.ae"},"license":"MIT","_id":"@aledan007/tester@0.4.0","maintainers":[{"name":"aledan007","email":"alexdanciulescu@gmail.com"}],"bin":{"tester":"dist/cli/index.js"},"dist":{"shasum":"96d04e01f1dc4a2c2bab1ceab31122bcae833ab7","tarball":"https://registry.npmjs.org/@aledan007/tester/-/tester-0.4.0.tgz","fileCount":14,"integrity":"sha512-2nEaPwhmhCrnSayqdodVV48WRfrOdB4HU+wQKYY5sxJ+o3dLK0fF/H+Uk6fKltexALElG0IRp/x4zh/4NLmPmQ==","signatures":[{"sig":"MEUCIDSF6atJpm6vA3zDGyv/qpZTSD9m88IExdLB5RCbeORFAiEApQufAfm+g6MuvPxQATIOH0yFFb/nU+TOFNmzFWALV0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35281230},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"76c45ecabe65b824d66d7ede26891c23c55ac4e2","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","test":"vitest run","build":"tsup","server":"tsx src/server/index.ts","typecheck":"tsc --noEmit","docs:build":"node scripts/build-docs.mjs","docs:serve":"node scripts/build-docs.mjs && npx --yes http-server docs-build -p 4173","self-audit":"npx playwright test --config self-audit/playwright.config.ts","test:watch":"vitest","start:server":"node dist/server/index.js","prepublishOnly":"npm run build","self-audit:remote":"SELF_AUDIT_URL=https://tester.techbiz.ae npx playwright test --config self-audit/playwright.config.ts"},"_npmUser":{"name":"aledan007","email":"alexdanciulescu@gmail.com"},"_npmVersion":"11.11.0","description":"AI-powered autonomous web testing engine — discover, test, and report on any website","directories":{},"_nodeVersion":"24.14.1","dependencies":{"cors":"^2.8.6","uuid":"^13.0.0","pngjs":"^7.0.0","express":"^5.2.1","js-yaml":"^4.1.1","otpauth":"^9.0.0","ts-morph":"^28.0.0","commander":"^13.0.0","puppeteer":"^24.0.0","pixelmatch":"^7.1.0","better-sqlite3":"^12.8.0","@anthropic-ai/sdk":"^0.71.2","@axe-core/puppeteer":"^4.10.0","@types/better-sqlite3":"^7.6.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","marked":"^18.0.2","vitest":"^3.0.0","typescript":"^5.9.0","@types/cors":"^2.8.19","@types/node":"^22.0.0","@types/uuid":"^10.0.0","@types/pngjs":"^6.0.5","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@playwright/test":"^1.59.1"},"_npmOperationalInternal":{"tmp":"tmp/tester_0.4.0_1778106746243_0.5136294631720353","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@aledan007/tester","version":"0.4.1","keywords":["testing","automation","puppeteer","ai","web-testing","accessibility","visual-regression","user-journey","e2e","ux-audit"],"author":{"name":"Alex Danciulescu","email":"alex@techbiz.ae"},"license":"MIT","_id":"@aledan007/tester@0.4.1","maintainers":[{"name":"aledan007","email":"alexdanciulescu@gmail.com"}],"bin":{"tester":"dist/cli/index.js"},"dist":{"shasum":"2705077bea898016c4ca613e15e853e36e562437","tarball":"https://registry.npmjs.org/@aledan007/tester/-/tester-0.4.1.tgz","fileCount":14,"integrity":"sha512-87zdJ7jawAx0/tf0eurLc2005c3mHDf1vMFMnWZqf1W26FJ8pabKL1qt/21mjCmlax4evmcGbnQRt1HOz/Q/OA==","signatures":[{"sig":"MEQCIB/IbI6JiYmVjDzqKk9M/aZsQ1t1Z894GwAKR/5vLTd/AiA8I60Fy96XRNjzomicikWbS6tJQoXMGsKLGoxSO3Grog==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35282396},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"ba4ea9ecb959a45b7557939b4d571f0064b0dc68","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","test":"vitest run","build":"tsup","server":"tsx src/server/index.ts","typecheck":"tsc --noEmit","docs:build":"node scripts/build-docs.mjs","docs:serve":"node scripts/build-docs.mjs && npx --yes http-server docs-build -p 4173","self-audit":"npx playwright test --config self-audit/playwright.config.ts","test:watch":"vitest","start:server":"node dist/server/index.js","prepublishOnly":"npm run build","self-audit:remote":"SELF_AUDIT_URL=https://tester.techbiz.ae npx playwright test --config self-audit/playwright.config.ts"},"_npmUser":{"name":"aledan007","email":"alexdanciulescu@gmail.com"},"_npmVersion":"11.11.0","description":"AI-powered autonomous web testing engine — discover, test, and report on any website","directories":{},"_nodeVersion":"24.14.1","dependencies":{"cors":"^2.8.6","uuid":"^13.0.0","pngjs":"^7.0.0","express":"^5.2.1","js-yaml":"^4.1.1","otpauth":"^9.0.0","ts-morph":"^28.0.0","commander":"^13.0.0","puppeteer":"^24.0.0","pixelmatch":"^7.1.0","better-sqlite3":"^12.8.0","@anthropic-ai/sdk":"^0.71.2","@axe-core/puppeteer":"^4.10.0","@types/better-sqlite3":"^7.6.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","marked":"^18.0.2","vitest":"^3.0.0","typescript":"^5.9.0","@types/cors":"^2.8.19","@types/node":"^22.0.0","@types/uuid":"^10.0.0","@types/pngjs":"^6.0.5","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@playwright/test":"^1.59.1"},"_npmOperationalInternal":{"tmp":"tmp/tester_0.4.1_1778109865146_0.31886162418380115","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@aledan007/tester","version":"0.4.2","keywords":["testing","automation","puppeteer","ai","web-testing","accessibility","visual-regression","user-journey","e2e","ux-audit"],"author":{"name":"Alex Danciulescu","email":"alex@techbiz.ae"},"license":"MIT","_id":"@aledan007/tester@0.4.2","maintainers":[{"name":"aledan007","email":"alexdanciulescu@gmail.com"}],"bin":{"tester":"dist/cli/index.js"},"dist":{"shasum":"f28dffb4fde58afb15fa1a28e53e640cc9f4e30b","tarball":"https://registry.npmjs.org/@aledan007/tester/-/tester-0.4.2.tgz","fileCount":14,"integrity":"sha512-7eIQSDekCMpIu4wzpYWDeum3EcfZISHb6xz0xscJ8lV1lzfOa6slmZe8436YGzvgqN6WZsS8Ft8sXTU+0rlFiQ==","signatures":[{"sig":"MEUCIQCPWcI94RSoUOm016M1vpdvBrY90Yml1p27nwNwKoKSdQIgT/itEOM6OLstE4rjD/w1ufaAb301gguogiuchdDTJow=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35284610},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"281413ff0143ad2b4328a714add5186e34e5240a","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","test":"vitest run","build":"tsup","server":"tsx src/server/index.ts","typecheck":"tsc --noEmit","docs:build":"node scripts/build-docs.mjs","docs:serve":"node scripts/build-docs.mjs && npx --yes http-server docs-build -p 4173","self-audit":"npx playwright test --config self-audit/playwright.config.ts","test:watch":"vitest","start:server":"node dist/server/index.js","prepublishOnly":"npm run build","self-audit:remote":"SELF_AUDIT_URL=https://tester.techbiz.ae npx playwright test --config self-audit/playwright.config.ts"},"_npmUser":{"name":"aledan007","email":"alexdanciulescu@gmail.com"},"_npmVersion":"11.11.0","description":"AI-powered autonomous web testing engine — discover, test, and report on any website","directories":{},"_nodeVersion":"24.14.1","dependencies":{"cors":"^2.8.6","uuid":"^13.0.0","pngjs":"^7.0.0","express":"^5.2.1","js-yaml":"^4.1.1","otpauth":"^9.0.0","ts-morph":"^28.0.0","commander":"^13.0.0","puppeteer":"^24.0.0","pixelmatch":"^7.1.0","better-sqlite3":"^12.8.0","@anthropic-ai/sdk":"^0.71.2","@axe-core/puppeteer":"^4.10.0","@types/better-sqlite3":"^7.6.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","marked":"^18.0.2","vitest":"^3.0.0","typescript":"^5.9.0","@types/cors":"^2.8.19","@types/node":"^22.0.0","@types/uuid":"^10.0.0","@types/pngjs":"^6.0.5","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@playwright/test":"^1.59.1"},"_npmOperationalInternal":{"tmp":"tmp/tester_0.4.2_1778111056530_0.9773763176323644","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@aledan007/tester","version":"0.4.3","keywords":["testing","automation","puppeteer","ai","web-testing","accessibility","visual-regression","user-journey","e2e","ux-audit"],"author":{"name":"Alex Danciulescu","email":"alex@techbiz.ae"},"license":"MIT","_id":"@aledan007/tester@0.4.3","maintainers":[{"name":"aledan007","email":"alexdanciulescu@gmail.com"}],"bin":{"tester":"dist/cli/index.js"},"dist":{"shasum":"5554ac2d809a656290f9930974e2b5518cb2cd83","tarball":"https://registry.npmjs.org/@aledan007/tester/-/tester-0.4.3.tgz","fileCount":20,"integrity":"sha512-lYAiLK7TWWHYiE5viJKMMYRULaI0EnK7fjkgvEQZrfjVC/l/la3pSg195ym0SzOZOgEWXOdPh64DFRzeDMvgVg==","signatures":[{"sig":"MEYCIQC1UMvoa6A8yfK1hWN1KAFLYR9IWQLZZziSkDfeElc2iQIhAM63cexB9mFkFs9wa+FACUuzFdAi03G6ZwBSUtXLH/VK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35911284},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./self-test":{"types":"./dist/self-test/harness.d.ts","import":"./dist/self-test/harness.mjs","require":"./dist/self-test/harness.js"}},"gitHead":"6875e87b77eddb0a3f081cd017c4e6a13cdcf8b2","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","test":"vitest run","build":"tsup","server":"tsx src/server/index.ts","typecheck":"tsc --noEmit","docs:build":"node scripts/build-docs.mjs","docs:serve":"node scripts/build-docs.mjs && npx --yes http-server docs-build -p 4173","self-audit":"npx playwright test --config self-audit/playwright.config.ts","test:watch":"vitest","start:server":"node dist/server/index.js","prepublishOnly":"npm run build","self-audit:remote":"SELF_AUDIT_URL=https://tester.techbiz.ae npx playwright test --config self-audit/playwright.config.ts"},"_npmUser":{"name":"aledan007","email":"alexdanciulescu@gmail.com"},"_npmVersion":"11.11.0","description":"AI-powered autonomous web testing engine — discover, test, and report on any website","directories":{},"_nodeVersion":"24.14.1","dependencies":{"pg":"^8.20.0","cors":"^2.8.6","uuid":"^13.0.0","pngjs":"^7.0.0","express":"^5.2.1","js-yaml":"^4.1.1","otpauth":"^9.0.0","pdf-lib":"^1.17.1","bcryptjs":"^3.0.3","ts-morph":"^28.0.0","commander":"^13.0.0","puppeteer":"^24.0.0","pixelmatch":"^7.1.0","better-sqlite3":"^12.8.0","@anthropic-ai/sdk":"^0.71.2","@axe-core/puppeteer":"^4.10.0","@types/better-sqlite3":"^7.6.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","marked":"^18.0.2","vitest":"^3.0.0","@types/pg":"^8.20.0","typescript":"^5.9.0","@types/cors":"^2.8.19","@types/node":"^22.0.0","@types/uuid":"^10.0.0","@types/pngjs":"^6.0.5","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.59.1"},"_npmOperationalInternal":{"tmp":"tmp/tester_0.4.3_1778500644121_0.25875101128051603","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@aledan007/tester","version":"0.4.4","keywords":["testing","automation","puppeteer","ai","web-testing","accessibility","visual-regression","user-journey","e2e","ux-audit"],"author":{"name":"Alex Danciulescu","email":"alex@techbiz.ae"},"license":"MIT","_id":"@aledan007/tester@0.4.4","maintainers":[{"name":"aledan007","email":"alexdanciulescu@gmail.com"}],"bin":{"tester":"dist/cli/index.js"},"dist":{"shasum":"a79cddedb0981b3d828bd2397fafda254fa539ec","tarball":"https://registry.npmjs.org/@aledan007/tester/-/tester-0.4.4.tgz","fileCount":20,"integrity":"sha512-J+4SAOHt+Sxx0XH6rvmme9udctg/w73WgVmp91uplsXdIIzMiVmb6G8bbNHTNxEsXZnf8kxYSqc1AsaY2Xk6Ug==","signatures":[{"sig":"MEYCIQCki+GA90yoW2l0P/MDKEo/T37bnV6s/i8zR8DndTR9qQIhAJiAG+MNW4lUgVgaDVWU7K+PAx92gmjlxpExmOEarOAh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35917099},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./self-test":{"types":"./dist/self-test/harness.d.ts","import":"./dist/self-test/harness.mjs","require":"./dist/self-test/harness.js"}},"gitHead":"6528be387031b30967e4f68fae2a3d67dfa75363","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","test":"vitest run","build":"tsup","server":"tsx src/server/index.ts","typecheck":"tsc --noEmit","docs:build":"node scripts/build-docs.mjs","docs:serve":"node scripts/build-docs.mjs && npx --yes http-server docs-build -p 4173","self-audit":"npx playwright test --config self-audit/playwright.config.ts","test:watch":"vitest","start:server":"node dist/server/index.js","prepublishOnly":"npm run build","self-audit:remote":"SELF_AUDIT_URL=https://tester.techbiz.ae npx playwright test --config self-audit/playwright.config.ts"},"_npmUser":{"name":"aledan007","email":"alexdanciulescu@gmail.com"},"_npmVersion":"11.11.0","description":"AI-powered autonomous web testing engine — discover, test, and report on any website","directories":{},"_nodeVersion":"24.14.1","dependencies":{"pg":"^8.20.0","cors":"^2.8.6","uuid":"^13.0.0","pngjs":"^7.0.0","express":"^5.2.1","js-yaml":"^4.1.1","otpauth":"^9.0.0","pdf-lib":"^1.17.1","bcryptjs":"^3.0.3","ts-morph":"^28.0.0","commander":"^13.0.0","puppeteer":"^24.0.0","pixelmatch":"^7.1.0","better-sqlite3":"^12.8.0","@anthropic-ai/sdk":"^0.71.2","@axe-core/puppeteer":"^4.10.0","@types/better-sqlite3":"^7.6.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","marked":"^18.0.2","vitest":"^3.0.0","@types/pg":"^8.20.0","typescript":"^5.9.0","@types/cors":"^2.8.19","@types/node":"^22.0.0","@types/uuid":"^10.0.0","@types/pngjs":"^6.0.5","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.59.1"},"_npmOperationalInternal":{"tmp":"tmp/tester_0.4.4_1778505003374_0.45303079269012914","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"@aledan007/tester","version":"0.4.5","description":"AI-powered autonomous web testing engine — discover, test, and report on any website","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./self-test":{"types":"./dist/self-test/harness.d.ts","import":"./dist/self-test/harness.mjs","require":"./dist/self-test/harness.js"}},"bin":{"tester":"dist/cli/index.js"},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","lint":"tsc --noEmit","server":"tsx src/server/index.ts","start:server":"node dist/server/index.js","docs:build":"node scripts/build-docs.mjs","docs:serve":"node scripts/build-docs.mjs && npx --yes http-server docs-build -p 4173","self-audit":"npx playwright test --config self-audit/playwright.config.ts","self-audit:remote":"SELF_AUDIT_URL=https://tester.techbiz.ae npx playwright test --config self-audit/playwright.config.ts","prepublishOnly":"npm run build"},"keywords":["testing","automation","puppeteer","ai","web-testing","accessibility","visual-regression","user-journey","e2e","ux-audit"],"author":{"name":"Alex Danciulescu","email":"alex@techbiz.ae"},"license":"MIT","dependencies":{"@anthropic-ai/sdk":"^0.71.2","@axe-core/puppeteer":"^4.10.0","@types/better-sqlite3":"^7.6.13","bcryptjs":"^3.0.3","better-sqlite3":"^12.8.0","commander":"^13.0.0","cors":"^2.8.6","express":"^5.2.1","js-yaml":"^4.1.1","otpauth":"^9.0.0","pdf-lib":"^1.17.1","pg":"^8.20.0","pixelmatch":"^7.1.0","pngjs":"^7.0.0","puppeteer":"^24.0.0","ts-morph":"^28.0.0","uuid":"^13.0.0"},"devDependencies":{"@playwright/test":"^1.59.1","@types/bcryptjs":"^2.4.6","@types/cors":"^2.8.19","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/node":"^22.0.0","@types/pg":"^8.20.0","@types/pngjs":"^6.0.5","@types/uuid":"^10.0.0","marked":"^18.0.2","tsup":"^8.0.0","tsx":"^4.21.0","typescript":"^5.9.0","vitest":"^3.0.0"},"gitHead":"51d15b26bf192badbf68ac88075812adfd4993dc","_id":"@aledan007/tester@0.4.5","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-X5MNBy2hHXngNIwHkVueWo2+oTODC2xq4sfQNuMENS5cbppqt6yEQtVa6WDqON+Ne3Qhfjdjr1+UTlLo8ZaZKA==","shasum":"4be991dfb186b574d0df93d9daf762ab72f9da95","tarball":"https://registry.npmjs.org/@aledan007/tester/-/tester-0.4.5.tgz","fileCount":20,"unpackedSize":35931979,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCBMsjjPVmpbTlPCcS5Nq2tJBODJCxjFxg7Sns5uNwlggIgAcbNIIfZMgd/2wygWkrbSEoZ5qtfLY8PN2djPSDrYHw="}]},"_npmUser":{"name":"aledan007","email":"alexdanciulescu@gmail.com"},"directories":{},"maintainers":[{"name":"aledan007","email":"alexdanciulescu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tester_0.4.5_1778971551856_0.6322880440112921"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-21T17:59:55.371Z","modified":"2026-05-16T22:45:52.290Z","0.2.0":"2026-04-21T17:59:55.720Z","0.3.0":"2026-05-04T08:29:58.827Z","0.4.0":"2026-05-06T22:32:26.641Z","0.4.1":"2026-05-06T23:24:25.587Z","0.4.2":"2026-05-06T23:44:17.288Z","0.4.3":"2026-05-11T11:57:24.429Z","0.4.4":"2026-05-11T13:10:03.753Z","0.4.5":"2026-05-16T22:45:52.183Z"},"author":{"name":"Alex Danciulescu","email":"alex@techbiz.ae"},"license":"MIT","keywords":["testing","automation","puppeteer","ai","web-testing","accessibility","visual-regression","user-journey","e2e","ux-audit"],"description":"AI-powered autonomous web testing engine — discover, test, and report on any website","maintainers":[{"name":"aledan007","email":"alexdanciulescu@gmail.com"}],"readme":"# @aledan007/tester\n\nAI-powered autonomous web testing engine. Discover, test, and report on any website using Claude AI + Puppeteer.\n\n## Features\n\n- **BFS Crawler** — Discovers up to 50 pages with depth-based traversal\n- **AI Scenario Generation** — Claude generates intelligent test scenarios from discovered elements\n- **Multi-platform Auth** — Auto-login for WordPress, Shopify, Wix + MFA/TOTP support\n- **14 DOM Assertions** — element existence, visibility, text, attributes, count, etc.\n- **Network Assertions** — response codes, no 4xx/5xx errors, network error detection\n- **Visual Regression** — Pixel-level comparison via `pixelmatch`\n- **Accessibility** — Full `axe-core` audit\n- **Performance** — FCP, LCP, TTI metrics\n- **HTML + JSON Reports** — Dark-themed interactive dashboard + CI-friendly JSON\n- **HTTP Server** — REST API for integration with other services (WebsiteGuru, CI/CD)\n- **CLI** — Run tests directly from the terminal\n- **Journey Audit** — Real-browser walk of authenticated user flow: login + click every nav link + screenshots + status classification (OK / GATED / EMPTY / HAS_ERRORS / CRASHED). Config-driven via a JSON file per project. Catches UX regressions that API-shape and unit tests miss (hidden pages, dead links, onboarding walls)\n\n## Installation\n\n```bash\nnpm install @aledan007/tester\n# or use directly via CLI\nnpx @aledan007/tester run https://example.com\n```\n\n## Quick Start\n\n### Library\n\n```typescript\nimport { AITester } from '@aledan007/tester'\n\nconst tester = new AITester({\n  anthropicApiKey: process.env.ANTHROPIC_API_KEY,\n  maxPages: 20,\n  accessibility: true,\n  performance: true,\n})\n\nawait tester.launch()\nconst results = await tester.run('https://example.com')\nconsole.log(`Score: ${results.summary.overallScore}/100`)\nawait tester.close()\n```\n\n### CLI\n\n```bash\n# Discover pages only\ntester discover https://example.com\n\n# Full test run\ntester run https://example.com --api-key sk-ant-...\n\n# Run with authentication\ntester run https://example.com \\\n  --username admin@example.com \\\n  --password secret123 \\\n  --login-url https://example.com/login\n\n# Run with MFA (TOTP)\ntester run https://example.com \\\n  --username admin@example.com \\\n  --password secret \\\n  --mfa-secret JBSWY3DPEHPK3PXP\n\n# Regenerate HTML report from saved JSON\ntester report ./reports/test-run-xxx.json\n```\n\n## HTTP Server\n\nThe tester exposes a REST API for integration with other services.\n\n### Start the server\n\n```bash\n# Development\nnpm run server\n\n# Production\nnpm run build && npm run start:server\n```\n\n### API Endpoints\n\n#### `GET /api/health`\nHealth check — no auth required.\n\n```json\n{ \"status\": \"ok\", \"activeJob\": null }\n```\n\n#### `POST /api/test/start`\nStart a new test run (single concurrency — one test at a time).\n\n**Auth:** `Authorization: Bearer <TESTER_API_SECRET>`\n\n**Body:**\n```json\n{\n  \"url\": \"https://example.com\",\n  \"config\": {\n    \"maxPages\": 10,\n    \"accessibility\": true,\n    \"performance\": false\n  }\n}\n```\n\n**Response:** `202 Accepted`\n```json\n{ \"testId\": \"uuid-...\", \"status\": \"queued\" }\n```\n\n#### `GET /api/test/:id/status`\nPoll for test progress.\n\n**Auth:** `Authorization: Bearer <TESTER_API_SECRET>`\n\n**Response:**\n```json\n{\n  \"status\": \"running\",\n  \"progress\": 45,\n  \"startedAt\": \"2026-01-01T10:00:00Z\",\n  \"completedAt\": null,\n  \"durationMs\": null,\n  \"summary\": null\n}\n```\n\n`status` values: `queued` → `running` → `completed` | `failed`\n\n#### `GET /api/test/:id/results`\nGet full test results (JSON).\n\n**Auth:** `Authorization: Bearer <TESTER_API_SECRET>`\n\n**Response:** Full `TestRun` object with all scenarios, assertions, and screenshots.\n\n#### `GET /api/test/:id/report`\nGet the HTML report (rendered in browser).\n\n**Auth:** `Authorization: Bearer <TESTER_API_SECRET>`\n\n**Response:** `text/html` — interactive dark dashboard.\n\n## Environment Variables\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `ANTHROPIC_API_KEY` | Yes* | — | Claude API key for AI scenarios + vision |\n| `TESTER_PORT` | No | `3012` | HTTP server port |\n| `TESTER_API_SECRET` | Yes (server) | — | Bearer token for HTTP server auth |\n\n*Required for AI scenario generation and vision-based element finding. Templates still work without it.\n\n## Configuration (TesterConfig)\n\n```typescript\ninterface TesterConfig {\n  // Browser\n  headless?: boolean           // Default: true\n\n  // Discovery\n  maxPages?: number            // Default: 50\n  maxDepth?: number            // Default: 3\n  crawlTimeout?: number        // Default: 120_000ms\n  allowedDomains?: string[]    // Restrict crawl to these domains\n  excludePatterns?: string[]   // URL patterns to skip\n\n  // Auth\n  credentials?: {\n    username: string\n    password: string\n    loginUrl?: string\n  }\n  mfaHandler?: MfaHandler      // Custom MFA resolver\n  sessionPath?: string         // Load/save session cookies\n\n  // AI\n  anthropicApiKey?: string     // Overrides ANTHROPIC_API_KEY env var\n  aiModel?: string             // Default: 'claude-sonnet-4-6'\n\n  // Features\n  screenshotOnError?: boolean  // Default: true\n  screenshotEveryStep?: boolean\n  visualRegression?: boolean   // Pixel diff vs baseline\n  accessibility?: boolean      // axe-core audit\n  performance?: boolean        // FCP/LCP/TTI metrics\n\n  // Reporting\n  outputDir?: string           // Default: './reports'\n  reportFormats?: ('json' | 'html')[]\n}\n```\n\n## CLI Commands\n\n### `tester discover <url>`\n\nCrawl a website and output discovered pages, forms, buttons, and links.\n\n```\nOptions:\n  --max-pages <n>     Maximum pages to crawl (default: 50)\n  --max-depth <n>     Maximum crawl depth (default: 3)\n  --timeout <ms>      Crawl timeout in ms (default: 120000)\n  --no-headless       Show browser window\n  -o, --output <dir>  Output directory (default: ./reports)\n  --json              Output raw JSON instead of formatted text\n```\n\n### `tester run <url>`\n\nRun a full test suite against a website.\n\n```\nOptions:\n  --max-pages <n>         Maximum pages to crawl\n  --max-depth <n>         Maximum crawl depth\n  --timeout <ms>          Total timeout in ms\n  --no-headless           Show browser window\n  -u, --username <user>   Login username\n  -p, --password <pass>   Login password\n  --login-url <url>       Login page URL (if different from base URL)\n  --api-key <key>         Anthropic API key (overrides env var)\n  --mfa                   Enable interactive MFA prompt\n  --mfa-secret <secret>   TOTP secret for automated MFA\n  --session <path>        Load existing session from file\n  --skip <types>          Comma-separated test types to skip\n  --only <types>          Run only these test types\n  -o, --output <dir>      Output directory (default: ./reports)\n```\n\n### `tester login <url>`\n\nLog in and save the session for later reuse.\n\n```\nOptions:\n  -u, --username <user>     Login username\n  -p, --password <pass>     Login password\n  --no-headless             Show browser window\n  --save-session <path>     Path to save session file\n  --mfa                     Enable MFA prompt\n  --mfa-secret <secret>     TOTP secret\n```\n\n### `tester journey-audit`\n\nReal-browser walk of an authenticated user journey. Logs in, visits every\nconfigured nav link, screenshots each page, classifies status. Catches UX\nregressions that code-level audits miss.\n\n```bash\n# Fastest: drop a .journey-audit.json in your project and run\nnpx @aledan007/tester journey-audit \\\n  --email you@example.com --password 'secret'\n\n# Use a packaged config by project name (configs shipped with Tester)\nnpx @aledan007/tester journey-audit --project tradeinvest \\\n  --email ... --password ...\n\n# Explicit path (useful in CI)\nnpx @aledan007/tester journey-audit --config ./path/to/config.json \\\n  --email ... --password ... --headed\n```\n\n**Config resolution** (first match wins):\n1. `--config <path>` flag\n2. `./.journey-audit.json` in the current working directory (decentralized — lives with each project)\n3. `--project <name>` → `<tester-install>/journey-audit/configs/<name>.json` (central registry shipped with Tester)\n\n**Config format** — see `journey-audit/configs/tradeinvest.json` for a full example. Minimum fields:\n\n```json\n{\n  \"name\": \"YourApp\",\n  \"baseUrl\": \"https://yourapp.example.com\",\n  \"login\": {\n    \"path\": \"/auth/login\",\n    \"emailSelector\": \"input[type=email]\",\n    \"passwordSelector\": \"input[type=password]\",\n    \"submitSelector\": \"button[type=submit]\",\n    \"successUrlPattern\": \"/(dashboard|home)\"\n  },\n  \"credentials\": { \"emailEnv\": \"JOURNEY_EMAIL\", \"passwordEnv\": \"JOURNEY_PASSWORD\" },\n  \"navLinks\": [\n    { \"name\": \"Dashboard\", \"href\": \"/dashboard\" },\n    { \"name\": \"Settings\", \"href\": \"/settings\" }\n  ],\n  \"onboardingMarkers\": \"Connect|Configure|Link your\",\n  \"emptyStateMarkers\": \"No .*yet|empty\",\n  \"errorMarkers\": \"error|failed\",\n  \"viewport\": { \"width\": 1440, \"height\": 900 }\n}\n```\n\n**Output**:\n- `journey-audit-results/<project>/screenshots/*.png` — one per nav link\n- `journey-audit-results/<project>/report.json` — structured findings per page with status, h1, notes, screenshot path\n\n**Options**:\n- `--headed` — show the browser window\n- `-o, --output <dir>` — results root (default `./journey-audit-results`)\n\n### `tester report <json-path>`\n\nRegenerate the HTML report from a saved JSON results file.\n\n```\nOptions:\n  -o, --output <path>   Output HTML file path\n  --title <title>       Report title\n  --no-screenshots      Exclude screenshots from report\n```\n\n## Test Categories\n\n| Category | Description |\n|----------|-------------|\n| `auth` | Login flows, session management, unauthorized access |\n| `navigation` | Page loads, links, 404 detection |\n| `forms` | Form validation, required fields, submission |\n| `functionality` | Button interactions, dynamic content |\n| `error_handling` | Invalid input, edge cases, error messages |\n| `accessibility` | axe-core WCAG audit |\n| `performance` | Core Web Vitals (FCP, LCP, TTI) |\n| `visual` | Pixel-level regression vs baseline |\n\n## Assertion Types\n\n| Type | Description |\n|------|-------------|\n| `element_exists` | Element is present in DOM |\n| `element_visible` | Element is visible (not hidden) |\n| `element_not_exists` | Element is absent |\n| `text_contains` | Element text includes value |\n| `text_equals` | Element text exactly matches |\n| `text_not_contains` | Element text does not include value |\n| `url_contains` | Current URL includes value |\n| `url_equals` | Current URL exactly matches |\n| `attribute_equals` | Element attribute matches |\n| `count_equals` | Number of matching elements |\n| `count_greater_than` | At least N matching elements |\n| `count_less_than` | At most N matching elements |\n| `no_console_errors` | No console errors during test |\n| `no_network_errors` | No failed network requests |\n| `response_ok` | HTTP response is 200-299 |\n| `no_4xx` | No 4xx HTTP responses |\n| `no_5xx` | No 5xx HTTP responses |\n| `visual_match` | Screenshot matches baseline (pixelmatch) |\n| `a11y_violations` | Zero or below threshold axe violations |\n| `performance_metric` | Core Web Vital within threshold |\n\n## Building\n\n```bash\nnpm run build         # Build all 3 entry points (lib + cli + server)\nnpm run dev           # Watch mode\nnpm run typecheck     # TypeScript type check\n```\n\nBuild output:\n- `dist/index.js` + `dist/index.mjs` + `dist/index.d.ts` — Library (CJS + ESM)\n- `dist/cli/index.js` — CLI binary\n- `dist/server/index.js` — HTTP server\n\n## Testing\n\n```bash\nnpm test              # Run all 85 tests (Vitest)\nnpm run test:watch    # Watch mode\n```\n\nTest coverage:\n- DOM, network, visual, a11y, performance assertions\n- BFS crawler, page analyzer\n- MFA detection, session persistence\n- Browser core (14 step actions)\n- Scenario executor\n- JSON + HTML reporter\n\n## Deployment\n\n### HTTP Server (VPS/Railway)\n\n```bash\n# Build first\nnpm run build\n\n# Set environment variables\nexport ANTHROPIC_API_KEY=sk-ant-...\nexport TESTER_API_SECRET=your-secret-token\nexport TESTER_PORT=3012\n\n# Start\nnpm run start:server\n```\n\n### Railway\n\nA `railway.json` is included for one-click Railway deployment.\n\n### PM2\n\n```bash\npm2 start dist/server/index.js --name tester\npm2 save\n```\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────┐\n│                   AITester                       │\n│                  (tester.ts)                     │\n└─────┬───────┬──────────┬───────────┬────────────┘\n      │       │          │           │\n   Browser  Auth    Discovery   Scenarios\n  (browser) (login)  (crawler)  (generator)\n      │                              │\n   Step         Claude API      Templates\n  Actions      (AI scenarios)  (built-in)\n      │\n  Assertions → Reporter → HTML/JSON\n```\n\n## License\n\nMIT — Alex Danciulescu, TechBiz Hub L.L.C-FZ\n","readmeFilename":"README.md"}