{"_id":"@camerihq/playwright-reporter","_rev":"5-0b27e0fe8be5db363e5acc72c4cdf9c8","name":"@camerihq/playwright-reporter","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@camerihq/playwright-reporter","version":"0.1.0","keywords":["playwright","reporter","testing","ci"],"license":"MIT","_id":"@camerihq/playwright-reporter@0.1.0","maintainers":[{"name":"samuelarbibe","email":"samuel.arbibe@gmail.com"}],"homepage":"https://github.com/samuelarbibe/cameri/tree/main/packages/reporter#readme","bugs":{"url":"https://github.com/samuelarbibe/cameri/issues"},"dist":{"shasum":"c6e91a142deef979f56576590a3729dda93ec814","tarball":"https://registry.npmjs.org/@camerihq/playwright-reporter/-/playwright-reporter-0.1.0.tgz","fileCount":9,"integrity":"sha512-GA9bXldmDvxMjVw3YEQEp/1L0oyPECEm2Si7Ph1ZbnIi9HWPkbgoJLx7tEdHbG1XPQP2l4LSLjiXmGIdwmNCsg==","signatures":[{"sig":"MEUCIAw8TZbduwZHB87wsOeSNh+/TPnkiInE7DqtuD6ZULHjAiEA288zvlQk85llC3vf8ma532CcNzgD3BExPXgC0bcfveA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@camerihq%2fplaywright-reporter@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":156191},"main":"./dist/index.cjs","type":"module","_from":"file:camerihq-playwright-reporter-0.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"samuelarbibe","email":"samuel.arbibe@gmail.com"},"_resolved":"/tmp/4380e848b423d22589d0242bdf70c19a/camerihq-playwright-reporter-0.1.0.tgz","_integrity":"sha512-GA9bXldmDvxMjVw3YEQEp/1L0oyPECEm2Si7Ph1ZbnIi9HWPkbgoJLx7tEdHbG1XPQP2l4LSLjiXmGIdwmNCsg==","repository":{"url":"git+https://github.com/samuelarbibe/cameri.git","type":"git","directory":"packages/reporter"},"_npmVersion":"12.0.2","description":"Playwright reporter that streams results to a Cameri server","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@playwright/test":"^1.62.1","@camerihq/contract":"0.0.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"_npmOperationalInternal":{"tmp":"tmp/playwright-reporter_0.1.0_1787551015390_0.36135522245751694","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@camerihq/playwright-reporter","version":"0.1.1","keywords":["playwright","reporter","testing","ci"],"license":"MIT","_id":"@camerihq/playwright-reporter@0.1.1","maintainers":[{"name":"samuelarbibe","email":"samuel.arbibe@gmail.com"}],"homepage":"https://github.com/samuelarbibe/cameri/tree/main/packages/reporter#readme","bugs":{"url":"https://github.com/samuelarbibe/cameri/issues"},"dist":{"shasum":"12e1653b5157981d4e976e8a2a10ab1fd97ca35f","tarball":"https://registry.npmjs.org/@camerihq/playwright-reporter/-/playwright-reporter-0.1.1.tgz","fileCount":9,"integrity":"sha512-F7YDREQZIHAaQrtM+qEGsp7TT0OGew+KcEAYmQ39U8JdD6InBbQbib7hIvldBhBmBQkPpo+CzVCWPaQMSpfyWA==","signatures":[{"sig":"MEQCIEIRoc+LpIj/QnZdCgOa61dsQs6pY0pmOwr+CMHodQZoAiB+eakRsSVv7+BfrYyVwBcuqW0EH6HMMgbIkNfCLspKNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@camerihq%2fplaywright-reporter@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":156191},"main":"./dist/index.cjs","type":"module","_from":"file:camerihq-playwright-reporter-0.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fca40074-63de-40fd-b848-5e1466738966"}},"_resolved":"/tmp/9f01b574bf65ed19ca2759dfbd6f92da/camerihq-playwright-reporter-0.1.1.tgz","_integrity":"sha512-F7YDREQZIHAaQrtM+qEGsp7TT0OGew+KcEAYmQ39U8JdD6InBbQbib7hIvldBhBmBQkPpo+CzVCWPaQMSpfyWA==","repository":{"url":"git+https://github.com/samuelarbibe/cameri.git","type":"git","directory":"packages/reporter"},"_npmVersion":"12.0.2","description":"Playwright reporter that streams results to a Cameri server","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@playwright/test":"^1.62.1","@camerihq/contract":"0.0.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"_npmOperationalInternal":{"tmp":"tmp/playwright-reporter_0.1.1_1787559034929_0.06360680907777772","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@camerihq/playwright-reporter","version":"0.1.2","keywords":["playwright","reporter","testing","ci"],"license":"MIT","_id":"@camerihq/playwright-reporter@0.1.2","maintainers":[{"name":"samuelarbibe","email":"samuel.arbibe@gmail.com"}],"homepage":"https://github.com/samuelarbibe/cameri/tree/main/packages/reporter#readme","bugs":{"url":"https://github.com/samuelarbibe/cameri/issues"},"dist":{"shasum":"0772644780c879ee94fe0c5a6968fa13073d37c6","tarball":"https://registry.npmjs.org/@camerihq/playwright-reporter/-/playwright-reporter-0.1.2.tgz","fileCount":9,"integrity":"sha512-2J+dJKBDUVW4qK53Qp9q7dr7Qx1vL5dhqJbNgITnpRh863kRmCAWtZan+Z3n35KO1RQjMMsRyicmS1pB3BMQHw==","signatures":[{"sig":"MEUCIBYZS0nD+2m6qUgH5yycMkaVuJpqfto3E9jRZ9BKtZg4AiEAoblWTjh8pG3VZRBAC7YzrhfcYM3FOIIgJVdhtfssrWo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@camerihq%2fplaywright-reporter@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":156191},"main":"./dist/index.cjs","type":"module","_from":"file:camerihq-playwright-reporter-0.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fca40074-63de-40fd-b848-5e1466738966"}},"_resolved":"/tmp/50c758d5e37eb8ac7f3b50400deafe64/camerihq-playwright-reporter-0.1.2.tgz","_integrity":"sha512-2J+dJKBDUVW4qK53Qp9q7dr7Qx1vL5dhqJbNgITnpRh863kRmCAWtZan+Z3n35KO1RQjMMsRyicmS1pB3BMQHw==","repository":{"url":"git+https://github.com/samuelarbibe/cameri.git","type":"git","directory":"packages/reporter"},"_npmVersion":"12.0.2","description":"Playwright reporter that streams results to a Cameri server","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@playwright/test":"^1.62.1","@camerihq/contract":"0.0.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"_npmOperationalInternal":{"tmp":"tmp/playwright-reporter_0.1.2_1787564741154_0.6493464703195295","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@camerihq/playwright-reporter","version":"0.2.0","keywords":["playwright","reporter","testing","ci"],"license":"MIT","_id":"@camerihq/playwright-reporter@0.2.0","maintainers":[{"name":"samuelarbibe","email":"samuel.arbibe@gmail.com"}],"homepage":"https://github.com/samuelarbibe/cameri/tree/main/packages/reporter#readme","bugs":{"url":"https://github.com/samuelarbibe/cameri/issues"},"dist":{"shasum":"ed911e01f44663cb566d67e1953df9d288821e72","tarball":"https://registry.npmjs.org/@camerihq/playwright-reporter/-/playwright-reporter-0.2.0.tgz","fileCount":9,"integrity":"sha512-QdK3Ahmej+7oWPlKnIw9BVWzJ3xJsWGo4y2eXZ6+iCpTzYhuDm9QQSh0LcgbkiXys5IDzLPYKJpgJ0r9650fEA==","signatures":[{"sig":"MEUCIHZP4BzccLSGuY/5jxEONjmiVxqgZkoEUh6mt2FW6/h/AiEAuhkM+u1NzQpg1Z7wJrH36frx/1qImO9mPWL3EQbDsZ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@camerihq%2fplaywright-reporter@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":159535},"main":"./dist/index.cjs","type":"module","_from":"file:camerihq-playwright-reporter-0.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fca40074-63de-40fd-b848-5e1466738966"}},"_resolved":"/tmp/8e765dd11c972ccb8e8edd780a2de9ba/camerihq-playwright-reporter-0.2.0.tgz","_integrity":"sha512-QdK3Ahmej+7oWPlKnIw9BVWzJ3xJsWGo4y2eXZ6+iCpTzYhuDm9QQSh0LcgbkiXys5IDzLPYKJpgJ0r9650fEA==","repository":{"url":"git+https://github.com/samuelarbibe/cameri.git","type":"git","directory":"packages/reporter"},"_npmVersion":"12.0.2","description":"Playwright reporter that streams results to a Cameri server","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@playwright/test":"^1.62.1","@camerihq/contract":"0.0.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"_npmOperationalInternal":{"tmp":"tmp/playwright-reporter_0.2.0_1787838015355_0.9272827724518349","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@camerihq/playwright-reporter","version":"0.2.1","description":"Playwright reporter that streams results to a Cameri server","license":"MIT","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"repository":{"type":"git","url":"git+https://github.com/samuelarbibe/cameri.git","directory":"packages/reporter"},"homepage":"https://github.com/samuelarbibe/cameri/tree/main/packages/reporter#readme","bugs":{"url":"https://github.com/samuelarbibe/cameri/issues"},"engines":{"node":">=20.10"},"peerDependencies":{"@playwright/test":">=1.40.0"},"publishConfig":{"access":"public"},"keywords":["playwright","reporter","testing","ci"],"devDependencies":{"@playwright/test":"^1.62.1","@camerihq/contract":"0.0.0"},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit","clean":"rm -rf dist .turbo"},"_id":"@camerihq/playwright-reporter@0.2.1","_integrity":"sha512-PdsWuR3+DPpPs2LceYHFEZQqPR/4+8tFQAyXtImtnCqdeFHPwcwXuKL+5XfA6aAGcN8zGU9OCOj51diVAzC2fQ==","_resolved":"/tmp/cdfa1685ae139c735a44ac7480960d57/camerihq-playwright-reporter-0.2.1.tgz","_from":"file:camerihq-playwright-reporter-0.2.1.tgz","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-PdsWuR3+DPpPs2LceYHFEZQqPR/4+8tFQAyXtImtnCqdeFHPwcwXuKL+5XfA6aAGcN8zGU9OCOj51diVAzC2fQ==","shasum":"78265b7a23718316bf266a758d777cc93f0a994e","tarball":"https://registry.npmjs.org/@camerihq/playwright-reporter/-/playwright-reporter-0.2.1.tgz","fileCount":9,"unpackedSize":159535,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@camerihq%2fplaywright-reporter@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGODr+QYNFYGA9GRf4cy0XxEwCafgUV9v0jWSXpRBoDEAiEAhBQykenrj3OOaSr7QwVGqR5UvkJJENw5d785Ab5bbk4="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fca40074-63de-40fd-b848-5e1466738966"}},"directories":{},"maintainers":[{"name":"samuelarbibe","email":"samuel.arbibe@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/playwright-reporter_0.2.1_1788180483071_0.9046062609522907"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-24T05:56:55.097Z","modified":"2026-08-31T12:48:03.916Z","0.1.0":"2026-08-24T05:56:55.547Z","0.1.1":"2026-08-24T08:10:35.072Z","0.1.2":"2026-08-24T09:45:41.334Z","0.2.0":"2026-08-27T13:40:15.497Z","0.2.1":"2026-08-31T12:48:03.196Z"},"bugs":{"url":"https://github.com/samuelarbibe/cameri/issues"},"license":"MIT","homepage":"https://github.com/samuelarbibe/cameri/tree/main/packages/reporter#readme","keywords":["playwright","reporter","testing","ci"],"repository":{"type":"git","url":"git+https://github.com/samuelarbibe/cameri.git","directory":"packages/reporter"},"description":"Playwright reporter that streams results to a Cameri server","maintainers":[{"name":"samuelarbibe","email":"samuel.arbibe@gmail.com"}],"readme":"# @camerihq/playwright-reporter\n\nStreams Playwright results to a [cameri](https://github.com/samuelarbibe/cameri)\nserver while the run is still going — live shard progress, per-attempt steps,\nerrors and attachments, and a run status that survives sharding.\n\n```sh\nnpm install --save-dev @camerihq/playwright-reporter\n```\n\n```ts\n// playwright.config.ts\nimport { defineConfig } from \"@playwright/test\";\n\nexport default defineConfig({\n  reporter: [\n    [\"list\"],\n    [\"@camerihq/playwright-reporter\", { serverUrl: \"https://cameri.example.com\" }],\n  ],\n});\n```\n\n```sh\nCAMERI_RECORD_KEY=cam_... npx playwright test --shard=1/4\n```\n\nReporting turns itself off when there is no server URL or record key, so the\nsame config works on a laptop without ceremony — and says why, once, rather\nthan being a silent no-op.\n\n## Options\n\nEvery option has an environment variable, and **the environment wins**: the\nconfig file is committed, and CI is where the secrets and per-build values are.\n\n| Option | Variable | Default | |\n| --- | --- | --- | --- |\n| `serverUrl` | `CAMERI_SERVER_URL` | — | base URL of your cameri server |\n| `recordKey` | `CAMERI_RECORD_KEY` | — | project record key |\n| `runKey` | `CAMERI_RUN_KEY` | derived from CI | what makes N shards one run — see below |\n| `expectedShards` | `CAMERI_EXPECTED_SHARDS` | Playwright's `--shard` total | |\n| `shardIndex` | `CAMERI_SHARD_INDEX` | Playwright's `--shard` current | set it when something other than `--shard` split the suite — see below |\n| `enabled` | `CAMERI_ENABLED` | on when the URL and key are both set | |\n| `batchSize` | `CAMERI_BATCH_SIZE` | `50` | attempts buffered before a flush |\n| `flushIntervalMs` | `CAMERI_FLUSH_INTERVAL_MS` | `2000` | longest a result waits to be sent |\n| `timeoutMs` | `CAMERI_TIMEOUT_MS` | `15000` | per request |\n| `maxRetries` | `CAMERI_MAX_RETRIES` | `3` | attempts per batch before giving up on it |\n| `debug` | `CAMERI_DEBUG` | `false` | logs what it is doing |\n\n## Sharded runs\n\nPlaywright shards across N machines and no shard knows when the build is\nfinished, so the run key is what ties them together: every shard of one build\nmust send the same one. It is derived from the CI environment — the pipeline or\nworkflow run id — which is right on GitHub Actions, GitLab CI, CircleCI,\nBuildkite and Jenkins without configuration.\n\nWhere the detection is wrong, set `CAMERI_RUN_KEY` yourself to anything stable\nacross the build. Off CI it falls back to a per-invocation local key, so two\n`playwright test` runs on your machine stay two runs.\n\nThe server closes the run when the last shard reports in, or sweeps it to\n`timedOut` if a machine dies mid-run.\n\nWhich shard this is comes from Playwright's `--shard`, so normally there is\nnothing to set. If something else did the splitting — a file list from\n[`cameri shard`](https://github.com/samuelarbibe/cameri/tree/main/packages/cli#cameri-shard),\nor your own — then `config.shard` is null and every machine would file its\nresults as shard 1. Set `CAMERI_SHARD_INDEX` in that case. The reporter cannot\ninfer it: a list of files says nothing about how many lists there were.\n\n## What gets sent\n\nResults stream in batches as tests finish rather than in one payload at the end,\nwhich is what makes a dashboard watching a live run useful. Each attempt carries\nits status, timings, errors with stacks and snippets, the step tree, tags,\nannotations, and stdout/stderr — capped, so a chatty test cannot push a megabyte\nper attempt.\n\nFile attachments — traces, screenshots, videos — are uploaded directly to\nstorage against short-lived URLs the server hands out. The bytes never pass\nthrough the API. Inline attachment bodies are skipped.\n\n## Two rules it will not break\n\n**It will never fail your run.** Anything that throws inside a reporter hook is\ncaught, logged once, and reporting switches off for the rest of the run. A\ndashboard being down must not turn a green build red.\n\n**It will not hold your run up.** Batches flush on a serialized chain that\noverlaps with test execution, and the flush timer is `unref`d so a pending send\nis never what keeps Node alive after the tests are done.\n\n## Requirements\n\nNode 20.10+, Playwright 1.40+. Ships ESM and CJS, so it works whichever flavour\nyour `playwright.config` is.\n\nMIT licensed. Issues and discussion at\n[samuelarbibe/cameri](https://github.com/samuelarbibe/cameri).\n","readmeFilename":"README.md"}