{"_id":"celest-browser","_rev":"2-72287dbadd1553a273f3ca659958ad19","name":"celest-browser","dist-tags":{"latest":"1.0.0"},"versions":{"0.0.0-stage":{"name":"celest-browser","version":"0.0.0-stage","_id":"celest-browser@0.0.0-stage","stub":true,"maintainers":[{"name":"stevendolerhas","email":"stevendo.lerhas@gmail.com"}],"dist":{"shasum":"11f51905e3cafd5df7362719e2976667cd36eb9c","tarball":"https://registry.npmjs.org/celest-browser/-/celest-browser-0.0.0-stage.tgz","fileCount":2,"integrity":"sha512-sSOSuNaSeJz/K2/60XQsIzujC3KjDJMJUjMRQTUqct/dMWw7PdTHvngWZx5LNRchiw9QcMLTnFFMu7nSwIp3Og==","signatures":[{"sig":"MEQCIAoQ5QSnCAH7ZMiC04zgyWY/2P5cam13XE1tRSk8ZCOyAiBdOECrEA9uESL1kC5hsTk0ZX+4hi6VD4mIVNPj9Wzb+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":336},"_npmUser":{"name":"stevendolerhas","email":"stevendo.lerhas@gmail.com"},"description":"Temporary package placeholder for staged publishing","directories":{}},"1.0.0":{"_id":"celest-browser@1.0.0","dist":{"shasum":"626126d4b89b019f8656932f51a68c863b54c41e","tarball":"https://registry.npmjs.org/celest-browser/-/celest-browser-1.0.0.tgz","fileCount":8,"integrity":"sha512-TyXdh18HWmJ0Uq0v2JjMsSY4zI6mu+DB/7DAbR21PisJSEaP5bnFVRHUTO21PJMFvADGqhN77Dt3MGAWsBITQQ==","signatures":[{"sig":"MEUCIGgwZuMg/FCZN20klIxiVUZdFXeH7u421jlR5XVQPYtFAiEAjvg4LBkP7oH9pjehShVlTLAvcYjZ0HxSaChO/WXy14E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDPDJjYogZx0jxWGzBIM2sVzm9kY/4rQe9DMpqIQPms4wIgLWKq04u2UBNdu30b9//bFEFbtdsFRgU9oGxryG+P7W8="}],"unpackedSize":22659},"main":"src/index.js","name":"celest-browser","engines":{"node":">=16.0.0"},"exports":{".":{"import":"./src/index.mjs","require":"./src/index.js"}},"license":"MIT","scripts":{"postinstall":"node scripts/install.js"},"version":"1.0.0","_npmUser":{"name":"stevendolerhas","email":"stevendo.lerhas@gmail.com"},"keywords":["browser","chromium","web","requests","puppeteer","headless"],"_npmVersion":"10.9.0","description":"Bypass bot protection with real browser web requests powered by a custom patched Chromium binary","directories":{},"maintainers":[{"name":"stevendolerhas","email":"stevendo.lerhas@gmail.com"}],"_nodeVersion":"22.11.0","dependencies":{"extract-zip":"^2.0.1","puppeteer-core":"^21.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/celest-browser_1.0.0_1794379457896_0.2458012955772395"}}},"time":{"created":"2026-11-11T06:43:01.705Z","modified":"2026-11-11T06:44:18.204Z","0.0.0-stage":"2026-11-11T06:43:01.705Z","1.0.0":"2026-11-11T06:44:17.988Z"},"description":"Bypass bot protection with real browser web requests powered by a custom patched Chromium binary","maintainers":[{"name":"stevendolerhas","email":"stevendo.lerhas@gmail.com"}],"readme":"# celest-browser\n\nBypass bot protection with real browser web requests powered by a custom patched Chromium binary with consistent, stable fingerprints. No Puppeteer configuration headaches, no bundled 300MB download from Google. One API call gets you rendered HTML, executed JavaScript, and real network behavior.\n\n```bash\nnpm install celest-browser\n```\n\n---\n\n## Why a custom binary?\n\nStandard Chromium builds expose automation signals, navigator properties, WebGL renderer strings, Canvas noise, CDP detection markers. \nThat cause inconsistent behavior when testing sites that check browser integrity. The patched binary is built with stable, consistent fingerprint values so your automated browser behaves like a normal desktop Chrome across repeated runs.\n\nUse cases:\n- **End-to-end testing** of your own site's bot detection and browser-integrity checks\n- **Web scraping** of public data from JS-heavy SPAs where `fetch()` returns nothing useful\n- **CI screenshot testing** with a consistent rendering environment\n- **Headless form automation** for internal tools and data pipelines\n- **Security research**, verifying your own application's client-side fingerprinting implementation\n\n---\n\n## Install\n\n```bash\nnpm install celest-browser\n```\n\nBinary downloads to `~/.celest/bin/chrome` on first install. Set `CELEST_SKIP_DOWNLOAD=1` to defer the download to first use.\n\n---\n\n## API\n\n### `get(url, options?)` → `Promise<Response>`\n\n```js\nconst { get } = require('celest-browser')\n\nconst { html, text, status, headers, url } = await get('https://example.com')\nconsole.log(status) // 200\nconsole.log(text)   // visible page text, JS rendered\n```\n\n### `post(url, body, options?)` → `Promise<Response>`\n\n```js\nconst { post } = require('celest-browser')\n\nconst res = await post('https://api.example.com/submit', { key: 'value' })\n// body object → JSON, content-type set automatically\n```\n\n### `fetch(url, options?)` → `Promise<Response>`\n\nFull control over method, headers, cookies, viewport, and wait strategy.\n\n```js\nconst { fetch } = require('celest-browser')\n\nconst res = await fetch('https://example.com', {\n  method: 'GET',\n  headers: { 'Authorization': 'Bearer token' },\n  userAgent: 'MyBot/1.0',\n  viewport: '1280x800',\n  waitUntil: 'networkidle2',   // 'load' | 'domcontentloaded' | 'networkidle0' | 'networkidle2'\n  timeout: 30000,\n  javascript: true,            // set false to disable JS execution\n  cookies: { session: 'abc' },\n})\n```\n\n### `openPage(url?, options?)` → `Promise<Page>`\n\nReturns a raw [Puppeteer Page](https://pptr.dev/api/puppeteer.page) for cases that need click interactions, form filling, or screenshot capture.\n\n```js\nconst { openPage, close } = require('celest-browser')\n\nconst page = await openPage('https://example.com')\nawait page.click('#load-more')\nawait page.waitForSelector('.results')\nconst html = await page.content()\nawait page.screenshot({ path: 'result.png' })\nawait page.close()\n\nawait close() // shut down the shared browser when done\n```\n\n### `close()` → `Promise<void>`\n\nShuts down the shared Chromium instance. Call before process exit in long-running programs.\n\n---\n\n## Response object\n\n| Field     | Type                       | Description                        |\n|-----------|----------------------------|------------------------------------|\n| `html`    | `string`                   | Full rendered page HTML            |\n| `text`    | `string`                   | Visible `innerText` of the page    |\n| `status`  | `number`                   | HTTP status code                   |\n| `headers` | `Record<string, string>`   | Response headers                   |\n| `url`     | `string`                   | Final URL after redirects          |\n\n---\n\n## Options reference\n\n| Option       | Type      | Default          | Description                              |\n|--------------|-----------|------------------|------------------------------------------|\n| `method`     | `string`  | `'GET'`          | HTTP method                              |\n| `headers`    | `object`  | `{}`             | Extra request headers                    |\n| `body`       | `string`  |,                | Raw request body                         |\n| `userAgent`  | `string`  | Chrome default   | Override User-Agent                      |\n| `viewport`   | `string`  |,                | e.g. `'1280x800'`                        |\n| `waitUntil`  | `string`  | `'networkidle2'` | Puppeteer navigation event               |\n| `timeout`    | `number`  | `30000`          | Navigation timeout in ms                 |\n| `javascript` | `boolean` | `true`           | Enable/disable JS execution              |\n| `cookies`    | `object`  | `{}`             | Cookies to set before navigation         |\n\n---\n\n## ESM\n\n```js\nimport { get, post, fetch, openPage, close } from 'celest-browser'\n```\n\n---\n\n## Requirements\n\n- Node.js 16+\n- Linux x64/arm64, macOS x64/arm64, Windows x64\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md","keywords":["browser","chromium","web","requests","puppeteer","headless"],"license":"MIT"}