{"_id":"@albeorla/web-automation-kit","_rev":"3-86a6f54f10890cb09a84e8acdb98f6f5","name":"@albeorla/web-automation-kit","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.1":{"name":"@albeorla/web-automation-kit","version":"1.0.1","keywords":[],"author":"","license":"ISC","_id":"@albeorla/web-automation-kit@1.0.1","maintainers":[{"name":"albeorla-dev","email":"albertjorlando@gmail.com"}],"bin":{"web-automation-kit":"dist/cli.js"},"dist":{"shasum":"49c914e9a77f9c5b6b40f0bf105148e61975ff22","tarball":"https://registry.npmjs.org/@albeorla/web-automation-kit/-/web-automation-kit-1.0.1.tgz","fileCount":26,"integrity":"sha512-zTbCVMktISWd6JKETTb1jKlBjSl9OkE506OLPBc+4a2sqrEiOwRzbkp0JtzoftUIZgvRQv+ezgRdGf0QNXp5+A==","signatures":[{"sig":"MEYCIQDgXKypPVfvz4zQESP/65zsaWdRjaH488R1aIgYPXZTuwIhAIa8YdQSD75TVVJH71H4T+RKnkJM+fRxYCe9f9Ng/ZYS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59699},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9a74b1f554550bcc56fd126ffc9ad0232c3bd9f9","scripts":{"build":"tsc","clean":"rm -rf dist","capture":"node dist/cli.js","prepare":"npm run build","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"albeorla-dev","email":"albertjorlando@gmail.com"},"_npmVersion":"11.6.4","description":"General-purpose web workflow recording kit","directories":{},"_nodeVersion":"22.17.1","dependencies":{"dotenv":"^16.4.0","playwright":"^1.50.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/web-automation-kit_1.0.1_1770137331233_0.9396371466293676","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@albeorla/web-automation-kit","version":"1.0.2","keywords":[],"author":"","license":"ISC","_id":"@albeorla/web-automation-kit@1.0.2","maintainers":[{"name":"albeorla-dev","email":"albertjorlando@gmail.com"}],"bin":{"web-automation-kit":"dist/cli.js"},"dist":{"shasum":"45c9a56e33150d8990b99fb382dafcc0049e92ce","tarball":"https://registry.npmjs.org/@albeorla/web-automation-kit/-/web-automation-kit-1.0.2.tgz","fileCount":32,"integrity":"sha512-TsradUXr4+wJx+ZElDcPz9GPBIbwoY9WPrOvewcSaTYkBtTZemoPnAEFmWAzWwmO7yB1TSadzgGJkDNKeW6P3w==","signatures":[{"sig":"MEUCIQCG1GgxB+xhShrEwnD+Cu4LhkezFO0yoN4xY+rBqY+m4QIgYZIgECA8Ybg5xdTM/LRDLtV7jc9sHFWtw5+r0Byvrpc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60477},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./env":{"types":"./dist/env.d.ts","import":"./dist/env.js"},"./playwright":{"types":"./dist/playwright.d.ts","import":"./dist/playwright.js"}},"gitHead":"9a74b1f554550bcc56fd126ffc9ad0232c3bd9f9","scripts":{"build":"tsc","clean":"rm -rf dist","capture":"node dist/cli.js","prepare":"npm run build","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"albeorla-dev","email":"albertjorlando@gmail.com"},"_npmVersion":"11.6.4","description":"General-purpose web workflow recording kit","directories":{},"_nodeVersion":"22.17.1","dependencies":{"dotenv":"^16.4.0","playwright":"^1.50.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/web-automation-kit_1.0.2_1770138322422_0.1924403918169153","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@albeorla/web-automation-kit","version":"1.0.3","description":"General-purpose web workflow recording kit","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./env":{"types":"./dist/env.d.ts","import":"./dist/env.js"},"./playwright":{"types":"./dist/playwright.d.ts","import":"./dist/playwright.js"}},"type":"module","publishConfig":{"access":"public"},"bin":{"web-automation-kit":"dist/cli.js"},"scripts":{"build":"tsc","typecheck":"tsc --noEmit","clean":"rm -rf dist","capture":"node dist/cli.js","prepublishOnly":"npm run build","prepare":"npm run build"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/node":"^22.0.0","typescript":"^5.7.0"},"dependencies":{"dotenv":"^16.4.0","playwright":"^1.50.0"},"gitHead":"453cfed6884fd65a34d20f3676d8fab9c065dbd7","_id":"@albeorla/web-automation-kit@1.0.3","_nodeVersion":"22.17.1","_npmVersion":"11.6.4","dist":{"integrity":"sha512-1TieHt7750P5Q4ltEFcz7xK9wR85vKU+2x4WhyULmzkqnscDSBNLJ3tg2ejOSW8++FOVtkCuN3TvA7Gdxx4Pig==","shasum":"ad5f58f31833c9dc9d2d787d81234f98274b85bb","tarball":"https://registry.npmjs.org/@albeorla/web-automation-kit/-/web-automation-kit-1.0.3.tgz","fileCount":32,"unpackedSize":61201,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGcLg0WU29Pla+bqFogHTiBBo//U6c4ej4TNzMdF4vbOAiEAoINjyMJZI5mfXR40uHX3KZmk1Euhyv4WZJMztQUrpAk="}]},"_npmUser":{"name":"albeorla-dev","email":"albertjorlando@gmail.com"},"directories":{},"maintainers":[{"name":"albeorla-dev","email":"albertjorlando@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/web-automation-kit_1.0.3_1770143064976_0.24336035346878693"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-03T16:48:51.146Z","modified":"2026-02-03T18:24:25.276Z","1.0.1":"2026-02-03T16:48:51.389Z","1.0.2":"2026-02-03T17:05:22.576Z","1.0.3":"2026-02-03T18:24:25.130Z"},"license":"ISC","keywords":[],"description":"General-purpose web workflow recording kit","maintainers":[{"name":"albeorla-dev","email":"albertjorlando@gmail.com"}],"readme":"# web-automation-kit\n\nA general-purpose, file-based workflow recorder for web apps (TypeScript + Playwright). You drive the browser manually; the kit records what happens: API requests/responses, navigations, form submits, and optional screenshots. This is intended to be shared infra: keep domain specifics (URLs, schedules, downstream parsing, naming conventions) in consumer repos.\n\n## What This Repo Contains\n\nThe core is `src/recorder/` (browser + recording) and `src/runs/` (run index). Local helpers live in `scripts/` and `justfile`.\n\nThe kit writes data relative to the current working directory (your domain repo): `data/.auth-state.json`, `data/runs/`, and `runs-index.json`. Most consumer repos should gitignore `data/` (and often `runs-index.json` as well).\n\n## Install\n\n```bash\nnpm install\nnpx playwright install chromium\nnpm run build\n```\n\n## How It’s Consumed (Domain Repos)\n\nThe intended model is “run the kit from the domain repo root”. That keeps data and config in the domain repo, while the recorder stays generic.\n\nIf you want a wrapper, a simple domain `justfile` can call the kit directly:\n```bash\n# in your domain repo justfile\nauth:\n    npx web-automation-kit auth\n\nrecord:\n    npx web-automation-kit record\n\nstatus:\n    npx web-automation-kit status\n```\n\nConfiguration can live in `.env` or `config.json`. Environment variables win over `config.json`.\n\nMinimal `.env`:\n```bash\nSOURCE_LOGIN_URL=https://example.com/login\n```\n\nOptional URL hints (helps auth detection):\n```bash\nAUTH_LOGIN_URL_HINTS=/login,/signin,/auth\nAUTH_SUCCESS_URL_HINTS=/app,/dashboard\n```\n\nMinimal `config.json` (schema: `config/config.schema.json`):\n```json\n{ \"schema_version\": \"1\", \"source_login_url\": \"https://example.com/login\" }\n```\n\nValidate config quickly:\n```bash\njust validate-config\n```\n\n## Template Repo\n\nFor a ready-to-fork consumer skeleton, see `~/dev/web-automation-kit-template`. It ships a minimal CLI wrapper and example config using this package.\n\n## Library Usage (Optional)\n\nYou can import the recorder from another project and provide config overrides programmatically:\n```ts\nimport { recordWorkflow, setConfig } from '@albeorla/web-automation-kit';\n\nsetConfig({\n  rootDir: process.cwd(),\n  overrides: {\n    SOURCE: { LOGIN_URL: 'https://example.com/login' },\n  },\n});\n\nawait recordWorkflow({ screenshots: true });\n```\n\n## Consumer Helpers\n\nIf a consumer repo wants to avoid direct `dotenv` or `playwright` dependencies, it can import them from this package instead:\n```ts\nimport '@albeorla/web-automation-kit/env';\nimport { chromium, type Page } from '@albeorla/web-automation-kit/playwright';\n```\n\nThis keeps consumer `package.json` lean and centralizes dependency updates in the kit.\n\n## Run\n\nAuthenticate once (saves `data/.auth-state.json`):\n```bash\nnpx web-automation-kit auth\n```\n\nRecord a workflow (stop with Ctrl+C):\n```bash\nnpx web-automation-kit record\n# or: npx web-automation-kit record --screenshots\n```\n\nView recent runs:\n```bash\nnpx web-automation-kit status\n```\n\n## Output Format\n\nEach run creates `data/runs/<run-id>/` with step-numbered files like `00_metadata.json`, `*_page_navigation.json`, `*_graphql_request.json`, `*_graphql_response.json`, `*_rest_request.json`, `*_rest_response.json`, `*_form_submit.json`, and optional `*_screenshot.png`. The exact sequence depends on the workflow you record.\n\nNote: form submit capture currently includes field values. If that is too sensitive for a given domain, the consumer repo should patch `src/recorder/capture.ts` or wrap/disable that hook.\n\n## Scheduling (Per Domain)\n\nThis repo intentionally does not ship domain jobs. Follow the pattern from `~/dev/launchd-kit`: domain repos define their own job scripts and plists, and use `launchd-kit` to install/reload/status. A template plist for the future replay feature lives at `scripts/com.user.web-automation-kit.replay.plist`.\n\n## How It’s Extended (Collaborators)\n\nThis repo should stay “boringly generic”. Collaborators typically extend it in one of two ways.\n\nDomain extension lives in the consumer repo: parse captured JSON, derive domain schema, schedule captures, and add any alerting/monitoring. Treat the recorder output as raw evidence and build the domain meaning elsewhere.\n\nRecorder extension lives here: add new capture capabilities that are broadly useful (redaction, extra event types, better request classification, stability improvements). Avoid hardcoding domains (URLs, selectors, request names) and prefer config flags when behavior needs to vary.\n\n## Development\n\nBuild: `npm run build`  \nTypecheck: `npm run typecheck`  \nClean: `npm run clean`\n","readmeFilename":"README.md"}