From 4fcce2d5b4d056e3aead41fe41f04192e09581ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sat, 24 Jan 2026 17:33:39 +0100 Subject: [PATCH] pl-api: Add a llms.txt idk what im doing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-api/llms.txt | 166 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 packages/pl-api/llms.txt diff --git a/packages/pl-api/llms.txt b/packages/pl-api/llms.txt new file mode 100644 index 000000000..e69290a40 --- /dev/null +++ b/packages/pl-api/llms.txt @@ -0,0 +1,166 @@ +# pl-api + +> A JavaScript library for interacting with Mastodon API-compatible servers + +## Overview + +pl-api is a TypeScript/JavaScript library that provides a type-safe client for interacting with Mastodon API-compatible servers. It supports 12 independent Mastodon API implementations and 5 forks, abstracting implementation differences between various backends. + +- Version: 1.0.0-rc.94 +- License: AGPL-3.0-or-later +- Homepage: https://codeberg.org/mkljczk/pl-fe/src/branch/develop/packages/pl-api +- Documentation: https://pl.mkljczk.pl/pl-api-docs +- NPM package: https://www.npmjs.com/package/pl-api + +## Key features + +- Type-safe API client using Valibot for validation and normalization +- Support for multiple Mastodon-compatible backends (Mastodon, Pleroma, Akkoma, Pixelfed, Iceshrimp, Mitra, and more) +- Feature detection to abstract implementation differences +- WebSocket streaming support +- Comprehensive API coverage + +## Basic usage + +```typescript +import { PlApiClient } from 'pl-api'; + +const client = new PlApiClient('https://mastodon.example/', ACCESS_TOKEN, { + fetchInstance: true, + onInstanceFetchSuccess: () => console.log('Instance fetched'), +}); + +// Create a status +await client.statuses.createStatus({ + status: 'Hello, world!', + language: 'en', +}); + +// Get account information +const account = await client.accounts.getAccount('123456'); + +// Fetch home timeline with pagination +const timeline = await client.timelines.homeTimeline({ limit: 20 }); +``` + +## API structure + +The PlApiClient is organized into the namespaces basing on the Mastodon API docs, extended with namespaces for non-Mastodon backends. + +## Feature detection + +pl-api uses the `Features` class to detect backend capabilities: + +```typescript +// Access detected features +console.log(client.features.version.software); // 'mastodon', 'pleroma', etc. +console.log(client.features.bookmarkFolders); // true/false +console.log(client.features.federating); // true/false +``` + +pl-api has compatibility definitions for 22 backends, including original projects and popular forks. Documentation for specific methods and params include reference to required features. + +## Type safety + +All API methods are fully typed with TypeScript: + +```typescript +import type { CreateStatusParams, Account, Status } from 'pl-api'; + +const params: CreateStatusParams = { + status: 'Hello!', + visibility: 'public', + language: 'en', +}; + +const status: Status = await client.statuses.createStatus(params); +``` + +## Pagination + +List endpoints return paginated results: + +```typescript +// Get first page +const response = await client.accounts.getAccountFollowers('123'); + +// Get next page using returned link header +if (response.next) { + const page2 = await response.next(); +} + +// Access the data +page1.items.forEach(account => console.log(account.username)); +``` + +## Projects using pl-api + +- **pl-fe** - Web client for Mastodon-compatible servers (https://codeberg.org/mkljczk/pl-fe) +- **pl-hooks** - React hooks library for Mastodon APIs (https://codeberg.org/mkljczk/pl-fe/src/branch/develop/packages/pl-hooks) + +## Development + +```bash +# Install dependencies +pnpm install + +# Build the library +pnpm -F pl-api build + +# Watch mode for development +pnpm -F pl-api watch + +# Run linter +pnpm -F pl-api lint +``` + +## Important notes + +- This project is in release candidate status (pre-1.0.0) and may have breaking changes +- All API methods return promises +- The client automatically handles request/response validation using Valibot +- Instance information is fetched on initialization when `fetchInstance: true` (required for feature detection) +- Access tokens are optional for public API endpoints + +## Common patterns + +### Error handling + +```typescript +try { + await client.statuses.createStatus({ status: 'Hello!' }); +} catch (error) { + console.error('API error:', error); +} +``` + +### Using request metadata + +```typescript +const result = await client.accounts.lookupAccount('user@domain.com', { + signal: abortController.signal, // For cancellation +}); +``` + +### Streaming + +```typescript +const stream = client.streaming.connect(); + +stream.subscribe('public'); + +stream.listen((event) => { + if (event.event === 'update' || event.event === 'status.update') { + const status = event.payload; + console.log('New status:', status.content); + } +}); +``` + +## Links + +- Repository: https://codeberg.org/mkljczk/pl-fe +- Issues: https://codeberg.org/mkljczk/pl-fe/issues +- NPM package: https://www.npmjs.com/package/pl-api +- API documentation: https://pl.mkljczk.pl/pl-api-docs +- Mastodon API docs: https://docs.joinmastodon.org