perlsky is a Perl 5 implementation of an AT Protocol Personal Data Server.
13
fork

Configure Feed

Select the types of activity you want to include in your feed.

Make atproto-smoke staging repo-ready

alice a0d8893a d4a6027a

+47 -2
+5
atproto-smoke/.gitignore
··· 1 + node_modules/ 2 + playwright-report/ 3 + test-results/ 4 + data/ 5 + .DS_Store
+18
atproto-smoke/README.md
··· 6 6 `tools/browser-automation/*` paths remain as thin compatibility wrappers for 7 7 the current `perlsky` workflow. 8 8 9 + ## Quickstart 10 + 11 + ```sh 12 + npm install 13 + npx playwright install chromium 14 + node bin/atproto-smoke.mjs print-example --mode dual > config.json 15 + $EDITOR config.json 16 + node bin/atproto-smoke.mjs run-dual --config config.json 17 + ``` 18 + 19 + For the lowest-friction path, point the suite at an existing PDS and two 20 + existing accounts. The package is intentionally adapter-friendly, but 21 + bring-your-own accounts are the default path for non-Perl PDS implementations. 22 + 9 23 ## Current Scope 10 24 11 25 The existing browser automation is already strong enough to be useful outside ··· 99 113 The browser layer stays because it catches real `social-app` assumptions and 100 114 AppView proxying issues. The direct API/AppView layers belong underneath it so 101 115 regressions become easier to debug and less brittle when the UI changes. 116 + 117 + In other words: this project should eventually answer both "does my PDS return 118 + the right protocol shapes?" and "does it still behave correctly through 119 + `bsky.app` and AppView-backed reads?". 102 120 103 121 ## Planned Next Steps 104 122
+12
atproto-smoke/package.json
··· 1 1 { 2 2 "name": "atproto-smoke", 3 3 "private": true, 4 + "description": "ATProto PDS compatibility smoke and end-to-end browser checks", 4 5 "type": "module", 6 + "engines": { 7 + "node": ">=20" 8 + }, 5 9 "bin": { 6 10 "atproto-smoke": "./bin/atproto-smoke.mjs" 7 11 }, 12 + "dependencies": { 13 + "playwright": "^1.54.2" 14 + }, 15 + "repository": { 16 + "type": "git", 17 + "url": "https://github.com/aliceisjustplaying/atproto-smoke.git" 18 + }, 19 + "homepage": "https://github.com/aliceisjustplaying/atproto-smoke", 8 20 "exports": { 9 21 ".": "./src/index.mjs", 10 22 "./config": "./src/config.mjs",
+12 -2
atproto-smoke/src/browser/lib/playwright-runtime.mjs
··· 2 2 3 3 try { 4 4 playwright = await import('playwright'); 5 - } catch { 6 - playwright = await import('../../../../tools/browser-automation/node_modules/playwright/index.mjs'); 5 + } catch (primaryError) { 6 + try { 7 + playwright = await import('../../../../tools/browser-automation/node_modules/playwright/index.mjs'); 8 + } catch { 9 + throw new Error( 10 + [ 11 + 'Unable to load Playwright.', 12 + 'Install dependencies with `npm install` and then install a browser with `npx playwright install chromium`.', 13 + `Original error: ${String(primaryError?.message ?? primaryError)}`, 14 + ].join(' '), 15 + ); 16 + } 7 17 } 8 18 9 19 export const { chromium } = playwright;