···1616## Quick start
17171818```sh
1919-npm install
2020-npx playwright install chromium
1919+bun install
2020+bunx playwright install chromium
21212222# generate a config, fill in your PDS URL and credentials
2323-node bin/atproto-smoke.mjs write-example --mode dual --output config.json
2323+bunx tsx bin/atproto-smoke.ts write-example --mode dual --output config.json
2424$EDITOR config.json
25252626# validate and run
2727-node bin/atproto-smoke.mjs validate --mode dual --config config.json
2828-node bin/atproto-smoke.mjs run-dual --config config.json
2727+bunx tsx bin/atproto-smoke.ts validate --mode dual --config config.json
2828+node dist/bin/atproto-smoke.js run-dual --config config.json
2929```
30303131That's it. Provide a `pdsUrl` and two account credentials, and the suite handles the rest. Run commands print per-step progress to `stderr` and write a JSON summary to `stdout` (`--json-only` for machine-readable output only).
···5050The suite ships with built-in adapters for different PDS implementations:
51515252```sh
5353-node bin/atproto-smoke.mjs list-adapters
5353+node dist/bin/atproto-smoke.js list-adapters
5454```
55555656- **`bring-your-own`** — the default. Works with any PDS that has accounts you can log into.
···7777Example configs live in [examples/](./examples). See [docs/SAMPLE_OUTPUT.md](./docs/SAMPLE_OUTPUT.md) for representative CLI output and `summary.json` shape.
78787979For the local `pdslab.net` smoke lab, the committed non-secret target inventory
8080-lives in [`src/lab/pdslab-targets.mjs`](./src/lab/pdslab-targets.mjs). If you
8080+lives in [`src/lab/pdslab-targets.ts`](./src/lab/pdslab-targets.ts). If you
8181also have the local credential ledger in `.tmp/smoke-accounts.local.json`, you
8282can generate runnable configs into `.tmp/generated/pdslab-configs/` with:
83838484```sh
8585-npm run write:pdslab-configs
8585+bun run write:pdslab-configs
8686```
87878888That writes one config per runnable target plus an `inventory.json` summary,
···67676868## Minimal Adapter Contract
69697070-The current registry lives in `src/adapters/registry.mjs`. A built-in adapter
7070+The current registry lives in `src/adapters/registry.ts`. A built-in adapter
7171definition looks like this in practice:
72727373```js
···11-export * from "./config.mjs";
22-export * from "./adapters/bring-your-own.mjs";
33-export * from "./adapters/perlsky.mjs";
44-export * from "./adapters/tranquil-pds.mjs";
55-export * from "./adapters/registry.mjs";
66-export * from "./lab/pdslab-targets.mjs";
77-export * from "./browser/run-single.mjs";
88-export * from "./browser/run-dual.mjs";
99-export * from "./cli.mjs";
+9
src/index.ts
···11+export * from "./config.js";
22+export * from "./adapters/bring-your-own.js";
33+export * from "./adapters/perlsky.js";
44+export * from "./adapters/tranquil-pds.js";
55+export * from "./adapters/registry.js";
66+export * from "./lab/pdslab-targets.js";
77+export * from "./browser/run-single.js";
88+export * from "./browser/run-dual.js";
99+export * from "./cli.js";